Chapter 1

Lit Review

Chapter 2

Experiment 1 (Proof of concept)

The objective of Experiment 1 was to establish baseline PSE response patterns in younger adults, and examine how PSE magnitudes differ across the three response-option conditions (RF-judgments / RFB-judgments / RF-Ratings). A 2x3 mixed factorial design was utilised, consisting of a within-subjects variable of stimulus type (words / grey-scale line-drawings) and a between-subjects variable of response-option (RF-judgments / RFBG-judgments / RF-Ratings).

Method

Participants

A total of 186 subjects completed the online experiment: 122 females (M age = 26.02 years, SD = 10.04), 60 males (M = 28.1 years, SD = 10.98), and 2 non-binary (M = 19.5 years, SD = 2.121). This sample size is typical in the literature for a medium effect size (.25), however, due to mixed conclusions regarding the direction of R + F, it was difficult to determine an exact a-priori number of subjects.

To meet our YA requirements, all participants were required to be between 18-59 years of age (actual range: 18-59). As our experiment involved English word stimuli, we also asked subjects whether English was their first language; the vast majority (93.01%) reported that English was indeed their first language.

The current sample was primarily comprised of participants sourced from voluntary participation websites such as (52.15%), where payment at the rate of £5/hr was given, and via the in-school (41.4%), where they received course participation credits. A small number of participants were also recruited from social media and other online sources (Facebook: 3.76%; Call For Participants: 1.61%; Reddit: 0.54%; unspecified: 0.54%).

Materials

A random pool of grey-scale line-drawings were sourced from Rossion & Pourtois (2004), along with their corresponding written-word object names (see Appendix XX). All items were imported into Photoshop CC (20.0.04 Release), where they were converted from their native .bmp file format into .png files. The corresponding written-word items were also created in Photoshop using the Calibri sans-serif typeface and again exported as .pngs. All items were automatically resized and presented at 250x250px by the online survey platform.

Procedure

Data collection was conducted via the online survey platform . Participants initially completed an encoding phase, where target stimuli (word and picture stimuli) were randomly presented one-at-a-time on-screen. To ensure subjects’ directed their attention toward stimuli during the study phase, we utilised a simple encoding question at study: “Is this a picture or a word?”. All participants showed a response accuracy of +>90% at study, indicating a high rate of attention toward the presented stimuli. This ability to determine whether participants were concentrating at study is why a blocked design was avoided at study (i.e. separate word / picture blocks); separate blocks for each stimuli-format would make our current encoding question redundant, and whilst we could have used a different question (e.g. “Is this item pleasant?”), we were keen to avoid any aforementioned levels-of-processing effects, whereby deep processing questions may result in ceiling effects for responses made toward picture stimuli.

The encoding phase was followed by a short distractor task, whereby participants completed 20 multiplication sums. This was followed by the recognition task, where subjects were again randomly presented with word and picture items on-at-a-time on-screen, and were required to respond “Old”/“New” depending on whether the recognised the item or not. “Old” responses were succeeded by a follow-up screen whereby participants were asked to report their recognition experience for the current item; the response-options available during this follow-up response page differed between participants, with random allocation into either the RFG, RFBG, or RF-Ratings response-option conditions. Instructions for the memory test were highly similar between conditions, deviating only to explain key changes such as: additional response options (i.e. “Both”, in the RFBG condition), and how certain responses should be reported (i.e. 0 on both scales to represent “Guessing” in the RF-Ratings condition).

Data analysis

DVs consisted of: i) the proportion of hits; ii) the proportion of FAs; iii) overall recognition (proportion of overall hits minus proportion of FAs), iv) d’ (d-prime; discrimination); v) c (response-bias criterion). Proportions of hits and FAs were also calculated separately based upon follow-up recognition judgments: Recollection, Familiarity, and Guessing. To achieve comparable proportions across each of the response-option conditions - in order to examine the PSE across the different groups - each group had slightly different proportion calculations. For the RFG group, simple proportions were used (i.e. what proportion of hits / FAs were assigned Recollection, Familiarity, and Guessing). For the RFBG group, we separately added the proportion of “Both” to Recollection and Familiarity proportions, since it was defined as representing both processes simultaneously. For the RF-Ratings group, proportions were calculated based on the number of responses above the threshold of+>3; a response was classified as “Recollection” when subjects rated between 3-5 on that particular scale (any Familiarity rating was permissible), and a response was classified as “Familiarity” when subjects rated between 3-5 on that particular scale (any Recollection rating was permissible). Guessing responses were calculated as the proportion of responses where participants rated 0 on both scales toward a single item (participants were instructed to respond in this way if their response was a rec).

Note: should we have a performance cut off? Some people have very low performance (like 0 or 1 hits) and should probably be excluded?

Results

Overall hits, false alarms (FAs), and recognition

Separate 2 (stimuli format: words, pictures) x 3 (response-option condition: RFG-judgments, RFBG-judgments, RF-ratings) mixed ANOVAs were conducted on the mean proportion of hits and false alarms (FAs; see Table 1).

Table 1: Mean proportion of hits and FAs by stimuli-format and response-option condition.

 

In the ANOVA on the proportion of hits, there was a significant main effect of stimuli-format, \(F(1, 183) = 131.77\), \(\mathit{MSE} = 0.01\), \(p < .001\); pictures (\(M = 0.62\)) produced a higher number of hits than words (\(M = 0.47\)), , supporting the notion that stimuli-format plays a role in item recognition. There was also a significant main effect of response-option condition, \(F(2, 183) = 6.46\), \(\mathit{MSE} = 0.09\), \(p = .002\), with the RFG group (\(M = 0.62\)) showing more hits compared to the RF-Ratings group (\(M = 0.48\)), , suggesting fewer available response-options may facilitate accurate recognition. There were no significant interaction effects, \(F(2, 183) = 0.35\), \(\mathit{MSE} = 0.01\), \(p = .707\). Click here to see output: [Appendix A - ANOVA Prop hits][].

The ANOVA on the proportion of FAs also highlights the role of stimuli-format on the memorability of items, with a significant main effect of stimuli-format \(F(1, 183) = 61.18\), \(\mathit{MSE} = 0.01\), \(p < .001\) showing words (\(M = 0.21\)) produced more FAs than pictures (\(M = 0.12\)), . There was no significant main effect of response-option condition, \(F(2, 183) = 2.70\), \(\mathit{MSE} = 0.03\), \(p = .070\), or significant interaction, \(F(2, 183) = 0.51\), \(\mathit{MSE} = 0.01\), \(p = .603\). Click here to see output: [Appendix B - ANOVA Prop FAs][].

A similar pattern was again reflected in the ANOVA on overall performance accuracy; a significant main effect of stimuli-format \(F(1, 183) = 409.20\), \(\mathit{MSE} = 0.01\), \(p < .001\) revealed that pictures (\(M = 0.50\)) showed an increased overall task performance accuracy compared with words (\(M = 0.27\)), . There was no significant main effect of response-option condition, \(F(2, 183) = 2.85\), \(\mathit{MSE} = 0.08\), \(p = .060\), or significant interaction, \(F(2, 183) = 0.33\), \(\mathit{MSE} = 0.01\), \(p = .720\). Click here to see output: [Appendix C - ANOVA Overall recognition][].

Discrimination (d’) and response bias (c)

To assess the roles of discrimination and response bias, separate 2 (stimuli format: words, pictures) x 3 (response-option condition: RFG-judgments, RFBG-judgments, RF-ratings) mixed ANOVAs were conducted on d’ (d-prime; measure of sensitivity) and c-scores (decision criterion; see Table 2).

Table 3:

The ANOVA on d’ scores was consistent with the hits, FAs, and overall recognition findings; there was a significant main effect of stimuli-format, \(F(1, 183) = 295.80\), \(\mathit{MSE} = 0.18\), \(p < .001\) showing pictures (\(M = 1.62\)) facilitated better discrimination between hits and FAs than words (\(M = 0.86\)), . There was again no significant main effect of response-option condition, \(F(2, 183) = 1.53\), \(\mathit{MSE} = 0.84\), \(p = .219\), or significant interaction, \(F(2, 183) = 0.25\), \(\mathit{MSE} = 0.18\), \(p = .778\). Click here to see output: [Appendix D - ANOVA d’ (discrimination)][].

In the ANOVA on c-scores, there was no significant main effect of stimuli-format, \(F(1, 183) = 2.31\), \(\mathit{MSE} = 0.11\), \(p = .130\), indicating response bias was unaffected regardless of whether participants were responding to words or pictures. There was, however, a significant main effect of response-option condition, \(F(2, 183) = 6.44\), \(\mathit{MSE} = 0.51\), \(p = .002\); those in the RF-Ratings condition (\(M = 0.67\)) showed higher c-scores (and thus a more conservative response bias) than those in the RFG condition (\(M = 0.34\)), , suggesting participants were less likely to respond “Old” when they were required to provide more detailed follow-up recognition judgments (Recollection: 0-5 / Familiarity: 0-5), compared to simply selecting one of three options (R,F, or G). There were no significant interaction effects, \(F(2, 183) = 0.14\), \(\mathit{MSE} = 0.11\), \(p = .869\). Click here to see output: [Appendix E - ANOVA c (bias)][].

Hits assigned Recollection, Familiarity, and Guessing

To determine the effects of stimuli-format and response-option on accurate recognition memory judgments, separate 2 (stimuli format: words, pictures) x 3 (response-option condition: RFG-judgments, RFBG-judgments, RF-ratings) mixed ANOVAs were conducted on the mean proportion of hits assigned Recollection, Familiarity, and Guessing (see Figure 1).

Figure 1: Proportion of hits assigned Recollection, Familiarity, and Guessing, by stimuli-format and response-option condition.

Recollection

The ANOVA on Recollected hits revealed a significant main effect of stimuli-format, \(F(1, 178) = 158.42\), \(\mathit{MSE} = 0.03\), \(p < .001\), with pictures (\(M = 0.67\)) showing a higher proportion of Recollected hits than words (\(M = 0.45\)), - consistent with the previous findings to suggest an enhanced memorability in pictures compared to words. There was also a significant main effect of response-option, \(F(2, 178) = 8.55\), \(\mathit{MSE} = 0.09\), \(p < .001\); the RF-Ratings group (\(M = 0.65\)) showed significantly more Recollected hits compared to both the RFG-group (\(M = 0.49\)), , and the RFBG-group (\(M = 0.54\)), . There were no significant interaction effects, \(F(2, 178) = 1.91\), \(\mathit{MSE} = 0.03\), \(p = .151\). Click here to see output: [Appendix F - ANOVA Rec hits][].

Familiarity

In the ANOVA on Familiarity hits, there was again a significant main effect of stimuli-format, \(F(1, 178) = 4.65\), \(\mathit{MSE} = 0.03\), \(p = .032\); words (\(M = 0.56\)) resulted in a higher proportion of familiarity hits than pictures (\(M = 0.52\)), , indicating that - when correctly recognised - words were not recognised in the the same context-rich nature as pictures. There was also a significant main effect of response-option, \(F(2, 178) = 34.52\), \(\mathit{MSE} = 0.09\), \(p < .001\), with the RF-ratings group (\(M = 0.71\)) showing more Familiarity hits than both the RFG-group (\(M = 0.38\)), , and the RFBG-group (\(M = 0.52\)), . The RFBG-group (\(M = 0.52\)) also showed significantly more Familiarity hits compared with the RFG-group (\(M = 0.38\)),

There was also a significant interaction, \(F(2, 178) = 34.42\), \(\mathit{MSE} = 0.03\), \(p < .001\) (see Figure 2). Within response-option conditions, words resulted in more Familiarity hits than pictures in both the RFG group (words: \(M = 0.48\); pictures: \(M = 0.29\)), \(t(178) = 6.07\), \(p < .001\); and RFBG group (words: \(M = 0.57\); pictures: \(M = 0.48\)), \(t(178) = 2.87\), \(p = .005\). Conversely, the RF-Ratings group showed the opposite pattern, with more Familiarity hits produced for pictures (\(M = 0.79\)) than words (\(M = 0.63\)), \(t(178) = -5.29\), \(p < .001\).

Between response-option conditions, word stimuli produced significantly more Familiarity hits in the RF-Ratings group (\(M = 0.63\)) compared tothe RFG group (\(M = 0.48\)), \(t(276.78) = -3.37\), \(p = .002\). For pictures, a higher number of Familiarity hits was evident in the RF-Ratings group (\(M = 0.79\)) compared to both the RFG group (\(M = 0.29\)), \(t(276.78) = -11.13\), \(p < .001\) and RFBG group (\(M = 0.48\)), \(t(276.78) = -6.94\), \(p < .001\). The RFBG group (\(M = 0.48\)) also showed a significantly higher number of Familiarity hits compared to the RFG group (\(M = 0.29\)), \(t(276.78) = -4.24\), \(p < .001\). Click here to see output: [Appendix G - ANOVA Fam hits][].

 

Figure 2: Interaction plot between stimuli-format and response-option condition for the mean proportion of hits assigned ‘Familiarity’.

Guessing

The ANOVA on Guessing hits again showed a significant main effect of stimuli-format, \(F(1, 178) = 42.84\), \(\mathit{MSE} = 0.01\), \(p < .001\), with words (\(M = 0.13\)) showing more Guessing hits than pictures (\(M = 0.06\)), - a finding that aligns with the results for hits assigned Recollection and Familiarity, whereby words appear to not be recognised in the the same context-rich nature as pictures. There was also a significant main effect of response-option, \(F(2, 178) = 14.97\), \(\mathit{MSE} = 0.03\), \(p < .001\), with the RF-Ratings group (\(M = 0.03\)) showing significantly fewer Guessing hits than both the RFG (\(M = 0.13\)), , and RFBG (\(M = 0.13\)) groups, . Despite ‘Guessing’ responses being permissable in any of the response-option groups, it seems when two independent rating scales were required participants were less likely to report a “Guess”. This could be because those in the RF-Ratings condition selected “New” more often than “Old” when they were having a complete guess, or instead, subjects might have opted to report lower levels of Recollection and Familiarity ratings (i.e., 1-3), rather than responding 0 on both scales.

There was also a significant interaction,\(F(2, 178) = 4.17\), \(\mathit{MSE} = 0.01\), \(p = .017\), (see Figure 3). Within response-option conditions, words resulted in more Guessing hits than pictures in both the RFG group (words: \(M = 0.17\); pictures: \(M = 0.08\)), \(t(178) = 5.38\), \(p < .001\); and RFBG group (words: \(M = 0.16\); pictures: \(M = 0.09\)), \(t(178) = 4.42\), \(p < .001\).

Between response-option conditions, word stimuli produced significantly fewer Guessing hits in the RF-Ratings group (\(M = 0.04\)) compared to both the RFG group (\(M = 0.17\)), \(t(281.42) = 5.44\), \(p < .001\), and the RFBG group (\(M = 0.16\)), \(t(281.42) = 5.18\), \(p < .001\). A similar pattern was also evident for pictures, with significantlyfewer of Guessing hits in the RF-Ratings group (\(M = 0.01\)) compared to both the RFG group (\(M = 0.08\)), \(t(281.42) = 2.70\), \(p = .020\) and RFBG group (\(M = 0.09\)), \(t(281.42) = 3.15\), \(p = .005\). Click here to see output: [Appendix H - ANOVA guess hits][].

Figure 3: Interaction plot between stimuli-format and response-option condition for the mean proportion of hits assigned ‘Guessing’.

False alarms (FAs) assigned Recollection, Familiarity, and Guessing

To determine the effects of stimuli-format and response-option on false recognition memory judgments, separate 2 (stimuli format: words, pictures) x 3 (response-option condition: RFG-judgments, RFBG-judgments, RF-ratings) mixed ANOVAs were conducted on the mean proportion of FAs assigned Recollection, Familiarity, and Guessing (see Figure 4).

 

Figure 4: Proportion of FAs assigned Recollection, Familiarity, and Guessing, by stimuli-format and response-option condition.

Recollection (FAs)

In the ANOVA on Recollection FAs, there was no significant main effect of stimuli-format, \(F(1, 136) = 2.78\), \(\mathit{MSE} = 0.04\), \(p = .098\), but there was a significant main effect of response-option, \(F(2, 136) = 10.70\), \(\mathit{MSE} = 0.12\), \(p < .001\), with those in the RF-ratings group (\(M = 0.38\)) showing more Recollection FAs than both the RFG-group (\(M = 0.14\)), , and the RFBG-group (\(M = 0.24\)), ).

This could indicate that when subjects were required to individually report Recollection and Familiarity on two 0-5 rating scales, they were more likely to experience (or report) false recognition (accompanied by non-existent contextual details) than when only three (RFG) or four (RFBG) response-options were provided. There were no significant interaction effects, \(F(2, 136) = 2.08\), \(\mathit{MSE} = 0.04\), \(p = .129\). Click here to see output: [Appendix I - ANOVA Rec FA][].

Familiarity (FAs)

The ANOVA on Familiarity FAs did not yield any significant results; with no significant main effect of stimuli-format, \(F(1, 136) = 1.12\), \(\mathit{MSE} = 0.04\), \(p = .292\), no significant main effect of response-option, \(F(2, 136) = 0.62\), \(\mathit{MSE} = 0.15\), \(p = .539\), and no significant interaction effects, \(F(2, 136) = 1.12\), \(\mathit{MSE} = 0.04\), \(p = .331\). Click here to see output: [Appendix J - ANOVA Fam FA][].

Guessing (FAs)

Finally, the ANOVA on Guessing FAs also showed no significant main effect of stimuli-format, \(F(1, 136) = 0.51\), \(\mathit{MSE} = 0.04\), \(p = .476\), but there was a significant main effect of response-option, \(F(2, 136) = 15.69\), \(\mathit{MSE} = 0.11\), \(p < .001\), with the with the RF-ratings group (\(M = 0.08\)) showing significantly fewer Guessing FAs than both the RFG (\(M = 0.35\)), , and RFBG groups (\(M = 0.30\)), . This again aligns with previous results, suggesting that those in the RF-Ratings group were less likely to report guesses than the other groups, whether accurate or not. There were no significant interaction effects, \(F(2, 136) = 0.07\), \(\mathit{MSE} = 0.04\), \(p = .935\). Click here to see output: [Appendix K - ANOVA Guess FA][].

Chapter 3

Experiment 2 (Image Norms)

Development of a new set of standardised photographic stimuli

The Picture Superiority Effect (PSE) is a highly robust and replicable phenomenon. In recognition memory paradigms, the PSE has been shown to manifest as both increased recollection and familiarity (Dewhurst & Conway, 1994; Rajaram, 1996, 1993; Wagner et al., 1997; Yonelinas, 2002). The effect is present in children, adolescents and healthy older adults (Whitehouse et al., 2006), though perhaps more striking is the fact that patients with Alzheimer’s disease or those presenting early isolated memory impairments, known as amnestic mild cognitive impairment (aMCI), also show memorial benefits toward pictures (Ally, 2012). This is supported by ERP studies demonstrating comparable enhancements to recollection-based ERP components between healthy older and aMCI groups when pictures, rather than words, are utilised (Ally et al., 2009). There is debate within the literature attempting to characterise the nature of memory deficits in aMCI, whereby despite general agreement that recollection processes are impaired in such individuals, findings show great inconsistency with regard to familiarity (Algarabel et al., 2012; Belleville, 2011; Pitarque, 2016; Wolk et al., 2011, 2013). The PSE may have been largely overlooked as an area for further research in an effort to help settle this debate, despite recent reviews highlighting methodological differences across studies as the potential source of inconsistent findings (Koen & Yonelinas, 2014; Migo et al., 2012; Schoemaker et al., 2014). The level at which stimuli distinctiveness impacts successful recognition is currently unclear, and there is little consistency across studies with regard to what is considered a ‘picture’.

Many experiments utilise illustrations for their picture stimuli (van der Meulen et al., 2012; Westerberg et al., 2013; Wolk et al., 2011), with a standardised set of items published by Snodgrass & Vanderwart (1980) among the most-used illustrated picture stimuli within the domain of memory research (Bermúdez-Margaretto et al., 2018; Deason et al., 2015; Hockley, 2008; Martins & Lloyd-Jones, 2006; McBride & Anne Dosher, 2002; Meade et al., 2019; Schmitter-Edgecombe et al., 2009; van der Meulen et al., 2012; Wagner et al., 1997; Wammes et al., 2016; Weldon et al., 1989; Weldon & Roediger, 1987; Whitehouse et al., 2006). The set consists of 260 line drawings of common, everyday objects (in black ink), along with their written word counterpart (e.g. “shoe”). Items were selected on the basis of exemplifying a number of semantic categories, including animals, furniture, fruit, etc., and a range of normative data was collected for each item; indices of naming agreement, mental imagery agreement, visual complexity, and familiarity were all recorded for each drawing. The normative data for the Snodgrass & Vanderwart (1980) items has been continually revisited, with a number of studies gathering culturally-appropriate norms (e.g. in Spanish (Sanfeliu & Fernandez, 1996), Chinese (Yoon et al., 2004), and Russian (Tsaparina et al., 2011), and additional testing of the relationship between reaction time and naming agreement (Székely et al., 2003). There are multiple theories of object recognition; the recognition-by-components theory proposed by Biederman (1987) identifies shape as the most crucial factor for successful recognition, in which case, the object outlines found in the set by Snodgrass & Vanderwart (1980) should be more than sufficient for experimental cognitive research. Other theories, however, posit that surface details such as colour and texture are just as crucial in forming object representations (Tanaka et al., 2001; Tarr & Bülthoff, 1998). The wide-ranging applicability of the Snodgrass & Vanderwart (1980) items throughout a number of cognitive disciplines has led to a more recent revision of the items by Rossion & Pourtois (2004). This revision consists of the exact same objects, digitally re-drawn to include surface textures and shading. Additionally, this set provides greyscale and colour versions for all items, as opposed to the greyscale-only items found in the Snodgrass & Vanderwart (1980) set (see Figure 5 for example items contained in the Snodgrass & Vanderwart (1980) and Rossion & Pourtois (2004) stimuli sets). The Rossion & Pourtois (2004) revision now appears to be favoured over the original Snodgrass & Vanderwart (1980) set among many cognitive researchers (Rollins & Riggins, 2018, p. @ensor2019; Stenberg, 2006; Wolk et al., 2008), almost certainly attributable to the increased detail and ability to choose whether colour is a necessary condition.

Despite their widespread use, line drawings have been criticised for their relative simplicity and lack of realism (Viggiano et al. (2004)), with many researchers favouring the use of photographs as experimental stimuli (Embree et al., 2012; Pitarque, 2016; Troyer et al., 2016, 2012; Wang et al., 2013). Photographs of faces are especially useful in research examining emotion and face recognition (Barba, 1997; Bowen et al., 2019; Cui et al., 2016; Herzmann et al., 2018), though a number of common-object photograph sets have also emerged as ecological alternatives to line-drawn items (Adlington et al., 2009; Moreno-Martínez & Montoro, 2012; Viggiano et al., 2004). While the published sets of photographs are undoubtedly useful in a range of cognitive domains, they do not allow us to specifically examine stimuli format as a factor on its own, as the concepts depicted are unique to the set they derive from. In order to make such comparisons, and ensure any differences in performance (e.g. recognition memory ability) are indeed attributable to stimuli format, the objects depicted must be consistent across stimuli formats. The current study presents a new set of photographic stimuli that extend the set of words and drawings provided by Rossion & Pourtois (2004), wherein each of the concepts depicted has been carefully matched across formats. These new stimuli will be utilised throughout a number of planned recognition experiments that aim to systematically compare measures of recognition against different ‘levels’ of stimuli. The curation of a new set of photographs - carefully matched to other formats - allows investigation into whether picture superiority magnitudes are mediated by the format pictures are presented in. The inconsistent use of different formats across studies has previously made it difficult to reconcile effects obtained in response to drawings with those obtained in response to photographs - an inherent problem when concepts are not matched across format. Normative data for the new set of photographs is also presented, allowing others who also wish to use our photograph stimuli to filter items by measures of naming agreement, mental imagery agreement, familiarity, visual complexity, and colour diagnosticity.

Method

Participants

A total of 374 subjects completed the online experiment (see Table 4 for a breakdown of the gender and age of the sample). This sample size provided 20 data points for each of the five response types, while also ensuring the experiment did not last too long for participants (approx 25-mins). Subjects were recruited from both voluntary participation websites such as (where they received payment at the rate of £5/hr), and via the in-school (where they received course participation credits).

Table 4: Gender and age (SD) of the current sample.

To meet our YA requirements, all participants were required to be aged between 18-59 years (actual obtained range: 18-59 years). As our experiment involved typing the English labels for a range of image stimuli, subjects were also asked whether English was their first language; all but one participant indicated that English was indeed their first language (99.73%).

Materials

A pool of 136 line drawings (Rossion & Pourtois, 2004) - depicting common, everyday objects - were brought forward from the previous experiment. These items (along with their written-word labels) would form two of the unique stimuli formats that would be used in future recognition experiments (words and drawings). In this study, the drawings from Rossion & Pourtois (2004) were simply used as a reference in the photograph matching process. Corresponding photographs were obtained online with the aim of depicting the everyday objects in a similar manner to the drawings. The inherent subjectivity involved in this process may have led to images that were not a reliable ‘match’ to the concepts they were selected to depict (for example, the photograph chosen to depict the concept “bottle” may inadvertently provoke the majority of participants to give the label “wine”, thus indicating that this particular photograph fails to accurately depict the intended concept). To address this issue, and ensure all photographs more objectively depict the same concepts as the line drawings, three different photograph variations were found for each everyday object, with the aim of taking the best ‘match’ forward. An emphasis was placed on variety across these variations, with the aim of obtaining at least one photograph that very closely resembled the line-drawn depiction, and another offering a more modern depiction. Some items were substituted due to unique restrictions that meant they could not easily be translated into photographic format (for example, the shapes “arrow” and “star” can not be represented similarly as photographs). Photo stimuli were obtained by searching open-source, copyright-free image websites (e.g. ; ) for photographs that depicted the same everyday objects as the line drawings (see Appendix B for the full list of image references).

   

    Figure 6: Examples of matching pictures across Snodgrass & Vanderwart (1980), Rossion & Pourtois (2004), and photographs from the current study. Greyscale versions of the drawings and photographs are not presented in this example.    

The matching process produced a total of 408 unique photographs. All were imported into Adobe Photoshop (20.0.04 Release), where the background was removed to isolate the object of interest from other potentially distracting visual details. This was completed manually using the magnetic lasso and polygonal lasso tools (edges were either feathered by 1px or left un-feathered). The orientation of isolated objects was adjusted to ensure they matched as closely as possible with their line-drawn counterpart (e.g. all photograph variations of the item ‘boot’ were adjusted so the toe was facing left and the heel facing right, as in the line drawing); this was often achieved by flipping or mirroring the object to ‘correct’ the direction.

Despite isolating objects from their background, a small number of photographs still contained irrelevant and potentially distracting details. For example, in one photograph variation of the item ‘piano’, there was a sign on the object that may have impacted how the item was named or rated. Such details were removed as best as possible using the clone stamp and content-aware fill tools. Any obvious text (e.g. brand names) and numbers were also removed from photographs using the same method (see Figure 7). The primary aim of the current study was to obtain photographs that could be clearly distinguished as a unique stimuli format among words and line drawings; it is conceivable that combining these formats (i.e. inadvertently including photographs that also contain written words) might affect recognition performance in ways that are not directly comparable to items defined only by a single category. Any text in our photographs was therefore removed, apart from a couple of exceptions whereby such details happened to be integral to the depiction of the object (e.g. the numbers found on a ruler or clock).

All photographs were exported from Photoshop in “.png” format in both their original colour and in greyscale (by setting saturation levels to 0). Final edits were completed in Adobe Lightroom (Classic, 8.2 Release): exposure (brightness) adjustments were made on images that appeared too light or too dark; highlights were decreased if some areas were too bright compared to the rest of the photograph; shadows were raised if some areas were too dark compared to the rest of the photograph; noise reduction was applied to some items after isolating the subject had inadvertently made unwanted noise/grain more visible. The changes made to each image were systematically applied to both the colour and greyscale versions (e.g. if one variation of “shoe” had an exposure increase of .010 for the colour version, the greyscale version also received an exposure increase of .010). Some colour-specific adjustments were made to the colour photographs only, however; common photo artefacts such as chromatic aberration (purple fringing) were corrected, along with white balance normalisation. Finally, all photographs were placed on a 600x600 pixel white background, and made to fill this frame as much as possible (i.e. some items were restrained by height, whilst others were restrained by width).

   

    Figure 7: Examples of background and text removal in photograph items.    

Design

This was a descriptive study; a mix of qualitative and quantitative data were gathered. Across three blocks, all participants provided five types of response toward photograph stimuli: i) Naming; ii) Familiarity; iii) Visual Complexity, iv) Colour Diagnosticity; and v) Mental Imagery Agreement. Excluding the Naming task (consisting of a typed single-word answer), all responses were provided on a 5-point ordinal scale. Within participants, the maximum number of response type provided for any one item was two; Naming and Familiarity responses were paired in one block, Visual Complexity and Colour Diagnosticity responses were paired in another, and Mental Imagery Agreement responses were always presented in a separate block. The order of these three blocks was counterbalanced across participants. Toward each individual photograph, participants made only one or two types of response before moving on to the next item, and the same items were not repeated to participants. For each photograph, the five types of required data were obtained by counterbalancing between participants (e.g. for the first variation of the “cat” photograph, the Naming and Familiarity data was obtained from one participant, the Visual Complexity and Colour Diagnosticity data was obtained from another, and the Mental Imagery Agreement data was obtained from another).

Procedure

Data collection was conducted via two online platforms; i) - a survey platform that allowed for straightforward collection of consent, demographics, and computer compatibility data, and ii) - an open-source experiment hosting platform for studies programmed in Javascript (Peirce et al., 2019).

In the Naming and Familiarity block, participants were first asked “What is the name of the item depicted?”. Subjects were instructed to name each photograph as briefly and unambiguously as possible, with one name only, and respond by typing their answer into the response box. If they did not know the name of an item, or had a tip-of-the-tongue experience, participants were instructed to type “no” for their answer (the term “don’t know” was avoided so as not to encourage subjects to deviate from single-word responses, as instructed).Following the naming judgement, with the same photograph still present on-screen, participants were next asked “How familiar is the item depicted?”. Subjects were instructed to judge each photo according to how usual or unusual the item was in their realm of experience; specifically, familiarity was defined as “the degree to which you come in contact with, or think about, the concept”, and encouraged participants to rate the concept itself rather than the particular way it was currently shown. Participants selected one value from the 5-point scale, ranging from very unfamiliar (1) to very familiar (5), and were encouraged to use the full range of the scale throughout the set of photographs.

In the Visual Complexity and Colour Diagnosticity block, participants were first instructed to respond to the question “How visually complex is this picture?” using a 5-point scale that ranged from “very simple” (1) to “very complex” (5). Complexity was defined to subjects as “the amount of detail in the picture”; in contrast to the familiarity ratings, participants were encouraged here to rate the complexity of the picture itself, rather than the real-life item. If the photograph shown was greyscale, subjects would simply move on to the next item. If the item shown was in colour, however, participants were also required to make a colour diagnosticity judgement. This concept was defined as “how typical / normal the colour of the item is”, instructing subjects to rate on a 5-point scale ranging from “Not at all diagnostic (i.e. this item could be in any other colour equally well)” (1) to "Highly diagnostic (i.e. this item appears only in this colour in real life). Participants were instructed to utilise the full range of options on the scale when making visual complexity and colour diagnosticity judgements. After making these ratings, a fixation cross was presented during a 1s interstimulus interval.

Due to the slight change in procedure and increased task complexity, Mental Imagery Agreement ratings were always acquired in an individual block (i.e. not alongside any other response types). First, participants were presented with a written label for 3s (e.g. “cat”) and told to focus their attention on the word. Once the written word disappeared, a beep tone was played alongside the instruction “close your eyes and imagine this item” (subjects were encouraged to close their eyes and begin imagining the item as soon as they heard the tone, but the written instruction were included as a further prompt). After 3s a second beep tone sounded to alert subjects to open their eyes, where they were presented with a photograph of the item they had been instructed to imagine. On a 5-point scale, participants were asked to “rate the agreement between your mental image and the picture”, from “low agreement” (1) to “high agreement” (5). The degree of agreement was defined as “how similar your mental image of the item is to the picture shown”. A fixation cross was displayed for 1s before the next word item was shown.

All responses were self-paced; the timing was only controlled during the study/imagine section of the Mental Imagery Agreement block.

   

    Figure 8: Data collection procedure for Mental Imagery Agreement responses.    

Data processing

The naming responses for each photograph item were manually assessed for spelling and typing errors. Automatic spell checking software was avoided in an effort to avoid inadvertently introducing unique names that were not actually given by participants. The vast majority of errors were unambiguous and easy to correct (e.g. “anker” = “anchor”, “peguin” = “penguin”, “ssnowman” = “snowman”), or consisted of transforming plural words to singular (or vice versa, depending on the form of the intended label - e.g. “sock” to “socks”). Some responses were a little more ambiguous, and necessitated comparison to the photographs they were in response to for additional clarity (e.g. a photograph depicting a plug that would fit into North American electrical sockets was labelled as “usplug” - given the nature of our UK-based sample, it’s likely the subject was responding: “U.S. (i.e. United States) plug”.

There were instances where subjects provided a sensible and correctly spelled English word, but that were clearly typos when examined against the photograph they were in response to (e.g. “dock” for a photograph depicting a duck, “frock” for a frog, and “beer” for a “bear”, etc). The most ambiguous spelling error to correct was “bittle”, which was provided by more than one participant and to more than one item; separate inspections of the photographs participants were responding to made this easy to correct though, with one participant clearly meaning to respond “bottle”, whilst the other meant to respond “beetle”. Though participants were instructed to only give a single label for each item, some multiple word responses were found (without spaces) during the spell checking process. On such occasions, a judgement was made regarding whether multiple words were retained, or whether the response could be shortened into a single word. A general rule was applied whereby if the other words provided additional information, they were retained (e.g.“maledear” - presumably “male deer” - was kept as a two-word answer). Multiple word responses were generally shortened into a single word when the intended label for the item was clearly present, and no information was lost in the process (e.g. “haircomb” was shortened to the intended answer “comb”). It is noted that there was some inherent subjectivity in this process, though as such items were not common among straightforward responses, their overall effects are estimated to be negligible.

Finally, there were some responses that were changed to “no” as they were clearly intended to signify that the responder did not know the name of the item shown; the experiment instructed participants to type “no” in these instances, though the labels “none” and “idk” (common abbreviation for “I don’t know) were provided instead. There was also a single response that was manually changed to”no“, as the provided label was a single letter and thus entirely unclear what the intended answer should be (see Appendix A for full list of manipulations to naming responses). This process yielded data that could be used to determine which photograph variation best matched the intended concepts (e.g. 100% of participants labelled the object “bottle”, indicating a perfect match), and which did not (e.g. only 50% of participants labelled the item “bottle”, whilst the other 50% gave the label “wine”, indicating a poor match). Photographs showing poor agreement across participant-generated labels, or those where the majority of labels differed from the intended concept, could be replaced with the variation demonstrating the most accurate depiction.

Analysis preperation

A number of variables were calculated prior to analysis. For familiarity, visual complexity, colour diagnosticity, and mental imagery agreement, mean ratings were calculated for each (see Appendix B). Mean reaction times (RTs) were also calculated for each photograph / response variable, including naming responses. For naming responses, accuracy was defined as the proportion of subjects reporting the correct/intended label for any given item (e.g. 80% of subjects correctly labelled a photograph of the moon as “moon”). Percentage agreement was also calculated (i.e. the proportion of subjects providing the most frequent name, regardless of whether it matched the correct/intended label) in order to compute H values for each item. The H statistic also reflects naming agreement, but it takes into account the total number of unique labels given for an item. This is especially useful for comparing similar items, as it captures information not provided by simple agreement proportions. For instance, if the first variation of the photo moon (‘moon-1’) demonstrated 90% naming agreement among subjects, and the second variation (‘moon-2’) also demonstrated 90% naming agreement, it would appear as if both versions offer the same level of agreement among participants. However, ‘moon-1’ may have received a total of 2 unique names (e.g. moon, planet), while ‘moon-2’ received a total of 4 unique names (e.g. moon, planet, earth, comet). H values utilise this useful information to determine which item shows the best naming agreement (in other words, the item with the least number of unique names). The original formula by Snodgrass & Vanderwart (1980) was used to calculate H values:

A H value of 0 indicates perfect naming agreement (all subjects responded with the same label for that item). Items showing a H value of 1 signify two unique names were provided, with identical proportions (e.g. 10 subjects responded “moon” and 10 subjects responded “planet”). As the H value increases, overall naming agreement decreases.

Results

Summary statistics (mean and SD) for each of the measured variables are shown in Table 5. Data for the grey and colour photographs are presented alongside previously obtained normative values for a number of other stimuli formats (all obtained from Rossion & Pourtois (2004), who published revised norms for Snodgrass & Vanderwart (1980)’s (S&V) original line drawings, as well as their own re-drawn versions that contained shading and texture detail). The data from previous studies were not used in any statistical analyses. To examine whether the grey and colour photographs from the current study demonstrated any differences, a series of independent samples t-tests were run on each variable, as well as their corresponding reaction times (excluding scores of colour diagnosticity, which were obtained only in response to the colour items and thus cannot be compared). Mean (and SD) values for all x816 unique photograph items are presented in Appendix B.

Naming

Naming accuracy was very high for all photographs (M = 0.95), indicating that overall, the selected items closely depicted the intended concepts. Compared with the other stimuli formats, there appears to be a steady increase in accuracy as items become more distinctive (see Table 5). Accuracy rates did not differ between the grey (M = 0.94) and colour (M = 0.95) versions of the photographs [\(t(749.02) = -0.44\), \(p = .660\)].

H values were also low across all items (M = 0.23), showing that subjects generally agreed on how the items should be named. Similar to naming accuracy, naming agreement also appears to steadily increase as items become more distinctive (as indicated by decreasing H values - see Table 5. While Rossion & Pourtois (2004) observed significantly better naming agreement for their colour - rather than greyscale - items, this pattern did not reach significance with the current set of photographs; H values did not differ between the grey (M = 0.24) and colour (M = 0.23) photographs [\(t(747.06) = 0.55\), \(p = .581\)].

A mean reaction time (RT) of (3.9s) was observed for naming responses. While this was of little interest on its own, and could not be compared to those obtained in response to the other stimuli formats as our methodology was slightly different (RTs were only recorded when subjects had typed their response and clicked the mouse to signify they had finished), they were useful for marking comparisons between the grey and colour items (though no difference was observed [M grey = 3.99s, M colour = 3.81s, \(t(666.35) = 1.46\), \(p = .144\)]). Overall, these analyses suggest that the current photographs closely resemble the drawings they were designed to match, with high levels of naming accuracy and agreement among subjects. The absence of any colour differences indicates there were no naming advantages when photographs were made even more distinctive through the addition of colour.

Table 5: Summary statistics for each of the measured variables. Mean values are presented in bold (SDs are shown in parentheses).

Mental imagery agreement

Scores of mental imagery agreement were moderate across all items (M = 3.6). While no colour differences were previously observed between stimuli formats, the grey (M = 3.46) photographs in the current study showed significantly lower mental imagery agreement scores than the colour (M = 3.74) items [\(t(797.29) = -6.47\), \(p < .001\)]. Comparisons with previous normative data also highlight how the grey photographs exhibited uniquely poorer mental imagery agreement scores than any of the other stimuli formats (see Table 5). RTs between the grey (M = 3.05) and colour (M = 2.84) items did not significantly differ [\(t(574.37) = 1.96\), \(p = .051\)].

Familiarity

Familiarity scores were high overall (M = 4.18), and like previous findings, there was no difference between the grey (M = 4.15) and colour (M = 4.21) items [\(t(812.90) = -1.59\), \(p = .113\)]. However, familiarity scores for the current set of photographs were higher than those obtained for any of the other stimuli formats, and while there previously appeared to be a decline in familiarity as stimuli become more distinctive (from line drawings, to grey shaded, to colour shaded), such a pattern was not evident with the current photographs (see Table 5). RTs between the grey (M = 0.98) and colour (M = 0.99) items did not significantly differ [\(t(783.06) = -0.32\), \(p = .747\)].

Visual complexity

Visual complexity ratings were moderate across all of the items (M = 3.35). Colour (M = 3.15) photographs showed significantly higher scores of visual complexity than grey (M = 2.86) photographs [\(t(813.64) = -6.51\), \(p < .001\)]. This finding is further demonstrated when compared to the scores from the other stimuli formats (see Table 5); where grey photographs show comparable levels of visual complexity, the colour photographs show higher scores than all of the other formats. There was no significant difference between the RTs of grey (M = 3.31) and colour (M = 3.39) items [\(t(739.22) = -1.07\), \(p = .287\)].

Selection of final items

For each concept represented in the photographs, one variation (e.g. shoe-1, shoe-2, or shoe-3) was selected for inclusion in a final list of stimuli that would be taken forward into subsequent recognition experiments. The normative naming data was assessed to establish which version best matched the existing line-drawn depictions of the concepts (Rossion & Pourtois, 2004). Naming was favoured over all of the other variables as, if an item was found to primarily convey a different concept than was intended during the naming task (e.g. if a photograph of the fruit ‘orange’ was labelled ‘grapefruit’ by the majority of subjects), then it could not be sufficiently compared to its line-drawn (and written-word) counterpart during recognition studies.

At least 20 unique naming responses were collected for each of the 816 photographs (408 grey items and 408 colour items). The proportion of ‘correct’ responses (i.e. names that were congruent with the intended concept) and the proportion of ‘don’t know’ responses were calculated for each item. Photographs were excluded if they:

  1. received a high proportion of “don’t know” responses (20%; all of the photographs depicted common, everyday objects, and so if a number of subjects were unable to name the item, that particular photograph was considered to be a poor representation of the item);
  2. were incorrectly named by the majority of subjects (i.e. if the proportion of correct responses equalled ≤ 50%, since it was essential for the photographs to depict the same concepts as those found in the line drawings and word stimuli);
  3. had particularly poor naming agreement (≤ 20% subjects named the object similarly). Items may not have been flagged by the second criteria (e.g. if it received 4 different names, each with a 25% ratio), but could still be considered poor representations of the intended concepts.

54 photographs were found to meet at least one of the above criteria, and therefore excluded. Regardless of whether these items were grey or colour, it was also necessary to remove its grey or colour partner (since both versions were needed to make comparisons across recognition experiments). Thus, a total of 64 items (32 grey / 32 colour) were excluded at this stage (many items already had both grey and colour versions flagged by the original criteria).

Next, the proportion of correct responses were compared between grey and colour photographs in order to identify items showing the lowest difference. In order to manipulate colour in later recognition experiments, it was important to select items where naming was congruent across colour/grey items; in other words, it would be difficult to attribute particular recognition response patterns to the addition of colour (if a difference were found) when the grey version could not be identified (or encoded) similarly. Variations exhibiting the least difference between colour and grey items (for the proportion of correct responses) were taken forward, while the rest were excluded. In a number of instances, multiple variations for the same object had the same ‘difference’ score. For example, all three variations of the item “balloon” exhibited perfect naming agreement, irrespective of whether they were presented in colour or grey (and thus “balloon1”, “balloon2”, and “balloon3” had a difference score of 0). For items where more than 1 variation remained, manual rankings were obtained from two of the researchers to determine which variation best depicted the intended concept. For each item, the researchers independently studied the remaining variations and provided a rank of which they thought was best (1) to worst (2 or 3, depending on the number of variations that remained). The ratings from both researchers were collated; items where there was agreement as to which variation best depicted the intended concept were selected for inclusion in the final stimuli list. For all the items where there was disagreement between the researchers rankings, one of the variations was simply selected at random.

Discussion

The role of colour

For naming responses (accuracy, agreement [H], and RTs), no differences were observed between the grey and colour photographs. Such a result was expected for accuracy and agreement scores; the addition/absence of colour should not alter how participants identify (and thus label) items, except in rare instances whereby a lack of colour may lead to the misidentification of an object (e.g. incorrectly labelling a greyscale photograph of an orange as ‘grapefruit’). The data indicates, however, that this was not common, with the grey set of photographs exhibiting equally high levels of naming accuracy as the colour photographs. The absence of RT differences between the colour and greyscale sets was not expected for naming responses. It is reasonable to assume that colour photographs - with an additional layer of contextual information compared to grey items - would be identified (and therefore named) quicker than grey photographs (e.g. a colour photograph of an orange should avoid the potential ambiguity that might accompany a greyscale depiction, which could initially be confused for another type of fruit). Indeed, Rossion & Pourtois (2004) demonstrated RTs consistent with this hypotheses, with colour drawings showing significantly quicker RTs than grey items. The lack of difference in the current data could be attributable to ceiling effects, whereby all photographs were sufficiently unambiguous, and were quickly identified irrespective of whether they were presented in greyscale or colour. Examination of the other naming data, showing similarly high levels of accuracy and agreement across grey and colour, supports this notion.

Scores of mental imagery agreement produced particularly interesting results between the grey and colour items. Grey photographs exhibited a significantly poorer match with subjects imagined presentation of the objects than the colour items. Colour differences were not observed previously between drawings (Rossion & Pourtois, 2004), and comparing the current data with that obtained in other studies (see Table 5) demonstrates how the greyscale photographs show uniquely lower mental imagery agreement scores compared with any of the other stimuli formats. To imagine the objects, it seems likely that subjects would conjure an image of how they naturally see the item in their everyday lives - which for the majority of subjects, would presumably be a colour representation. Therefore, when presented with greyscale depictions, subjects may have been more inclined to report that that item did not align quite as well as those presented in colour. However, it is unclear why a similar pattern is not also evident when comparing grey and colour drawings (Rossion & Pourtois, 2004). It may be that photographs promote stricter internal criteria when subjects must decide whether an item is a good match to their mental image. With line-drawn / illustrated items, subjects may simply accept that the items are baseline depictions, and that they will only able to match their real-world mental images to a certain degree - thus leading to a generally more liberal response bias throughout. The addition of colour may therefore do very little to further reconcile the match between the drawing and real-world mental representation. When subjects are responding only to photographs, the ecological nature of the items may facilitate deeper critical evaluation of whether they offer a good match to mental images, and thus promote a more conservative response bias. Colour may therefore be a far more important factor in photographs than it is in line drawings for allowing participants to decide whether an item matches well with their mental image.

There were no colour differences in familiarity scores. This result was expected - participants were asked to rate the degree to which they came in contact with, or think about, the concept itself rather than the particular depiction shown, and there is no apparent reason why colour should influence such ratings. Visual complexity, on the other hand, where participants were required to directly rate the amount of detail in the picture, did show an expected difference. Colour photographs were rated as significantly more visually complex than grey items, presumably due to their additional layer of contextual information. When compared to the previous data obtained for drawings, the greyscale photographs showed comparable levels of visual complexity, while the colour photographs showed higher levels than any of the other formats. It is unclear why the photographs of the current study showed colour differences, when grey and colour drawings did not differ, though it may tie in with the hypotheses proposed to explain the mental imagery agreement data. Subjects may apply stricter internal criteria when rating stimuli that are perceived as being closer to how they would be experienced in real life - when viewing a colour photograph of a rabbit, it is difficult to see how we could make the item any more visually complex than it already is (at least in a 2D medium). It’s probable that subjects notice the absence of colour when viewing the greyscale items, since they depict the items in a way that they are not usually seen, and thus determine that these items could be made more complex if they were shown in colour (and so give lower visual complexity ratings as a result).

Establishing a new set of stimuli

The objective of the current study was to establish a new set of ecological photograph stimuli to be taken forward into subsequent recognition memory experiments. Matching items with previously established drawings (and words) would allow for the effects of stimuli-format on recognition response patterns to be directly examined. A range of normative data was collected for 816 unique photograph items. These items may prove useful for a range of cognitive researchers that wish to utilise a set of high quality and realistic object stimuli, especially given the flexibility of items that can be filtered based on colour, naming agreement, familiarity, etc. For the needs of the current body of research, the naming data was used to determine which photographs best matched the intended concepts among a number of possible variations. This allowed for the systematic comparison of recognition memory performance toward three distinct stimuli formats (words, drawings, and photographs) in the following study, in an effort to establish how stimuli of varying perceptual distinctiveness may affect recognition response patterns. Such comparisons might help to reconcile the inconsistencies present across recognition memory research, such as those attempted to determine whether familiarity processes are preserved in those with amnestic Mild Cognitive Impairment (aMCI).

Experiment 3 (Grey drawings + photos)

Effect of stimuli format and response option on recognition memory judgments.

For the recognition memory experiment, everyday objects were presented in three stimuli formats: i) words (written in simple, black ink); ii) drawings (shaded line-drawn illustrations); and iii) photographs (detail rich exemplars of the real world object). Rossion & Pourtois (2004) demonstrated that naming agreement could be improved by adding surface texture and shading to the original Snodgrass & Vanderwart (1980) items; however, it is unclear how manipulations to distinctiveness actually impact performance in recognition memory paradigms. As well as general inconsistencies regarding the type of stimuli used in recognition memory experiments, there is also much variability in the response options available to participants when reporting their recognition, for example: Remember/Know (Lombardi et al. (2016)), Recollection/Familiarity (???), or Low/Med/High confidence (???). In the current experiment, the availability of different response options when reporting recognition will also be examined by randomly assigning participants into a paradigm with three response options (Recollection / Familiarity / Guessing) or four response options (RFG + Both).

Based on the results of Experiment 1, which compared recognition to for words and drawings only, a number of hypotheses are proposed as to the potential effects of adding a third stimuli format (highly distinctive photograph stimuli). As stimuli become increasingly distinctive (from words, to drawings, to photographs), it seems likely that the number of hits (correctly recognised items) will increase, and the number of false alarms (FAs) will decrease. RFG responses are expected to show a similar pattern, with the most detailed stimuli showing the highest number of hits assigned “Recollection”, while the less detailed formats show increasing levels of “Familiarity” and “Guessing” hits. Whilst we expect the overall number of FAs to increase as stimuli become less distinctive (i.e. words will show the highest rate of FAs), there is no reason to believe that these FAs will be biased toward any particular RFG judgement across formats. It is also hypothesised that the rates of reported Recollection and Familiarity will differ across response option conditions (RFG / RFBG), though the direction of this difference is currently unclear.

Method

Participants

A total of 158 subjects completed the online experiment (see Table 6 for a breakdown of the gender and age of the sample). To meet our YA requirements, all participants were required to be between 18-59 years of age (actual range: 18-58). As our experiment involved English word stimuli, we also asked subjects whether English was their first language; the vast majority (95.57%) reported that English was indeed their first language. Subjects were recruited from voluntary participation websites such as (72.78%), where payment at the rate of £5/hr was given, and via the in-school (15.19%), where they received course participation credits. A small number of participants were also recruited from (12.03%). In order to detect a medium effect size of Cohen’s f = 0.25 with 80% power (alpha = .05, two-tailed), G*Power indicated that we would need 79 participants per group (N = 158) in a 3x2 mixed ANOVA.

Table 6: Gender and age (SD) of the current sample.

Materials

A total of 126 innocuous, everyday objects (e.g. clock, rabbit, shoe) were presented across three individual stimuli formats: written words, line drawings, and photographs. The line drawings were obtained from Rossion & Pourtois (2004), and consisted of greyscale shaded illustrations that contained some surface details. The word stimuli were simply the written word names of the line-drawn objects, presented in a clear Sans-serif typeface. The photograph stimuli were curated in the previous study; high quality photographs were sourced to similarly depict the same everyday objects as the line drawings. All objects in the photographs were isolated from their original background, converted to greyscale, and rotated to match the orientations shown in the line-drawn items.

Design

The current study utilised a mixed design, with a 3-level within-subjects factor of stimuli format (words, drawings, photographs), and a 2-level between-subjects factor of response option (RFG, RFBG). Subjects passed through 2 levels of blocked randomization (equally sized, predetermined blocks); first, participants were randomly assigned one of six possible study lists (of equal length, and containing an even number of word, drawing, and photograph items) for counterbalancing purposes. Subjects were then either assigned into a recognition test with three possible response options (RFG: “Recollection”, “Familiarity”,“Guessing”), or four possible response options (RFBG: “Recollection”, “Familiarity”, “Guessing”, “Both”). These randomisation processes were completed automatically by the experiment software using balanced methods.

   

    Figure 9: Example stimuli from the three formats.    

Procedure

Data was collected online using - a platform for the building and hosting of online experiments. The experiment consisted of three self-paced phases: i) study phase, ii) distractor task, and iii) recognition test. In the study phase, an even mix of word, drawing, and photograph stimuli were presented one-at-a-time on the computer screen. Subjects were instructed to learn the items in preparation for a later memory test. To ensure attention was directed to the presented stimuli, subjects were required to report whether each item was shown as a word, drawing, or photograph using the computer mouse. Following the study phase, participants completed some simple multiple choice mathematical questions (e.g. 6 x 4 = ?) as a distractor. Finally, participants memory of the previously studied items was testing in the recognition task. An even mix of word, drawing, and photograph stimuli were again presented one-at-a-time on the screen; half of the test items had been shown previously in the study phase, while the other half were new (and were not on the study list). For each item, subjects were instructed to press “Old” if they believed it was an item they had studied earlier, and “New” if they had not. “Old” responses led to a follow-up judgement, where participants reported whether they had experienced recognition through “Recollection”, “Familiarity”, or were simply taking an uninformed “Guess”. Participants that had been randomised into the RFBG test condition had a fourth option here, whereby they could report that they had experienced Recollection and Familiarity simultaneously (“Both”). Stimuli format was congruent across the study and test blocks (e.g. items presented as photos at study were also presented as photos at test). For each concept depicted across the three stimuli formats, subjects were only presented with one variation (in other words, if a subject saw a photograph for the item “shoe”, they did not see the word or line-drawn version of “shoe”).

Data processing

Measured variables included the total number of hits and FAs, and the total number of hits and FAs assigned to each of the available response options (R/F/G and R/F/B/G). In order to create a common dependant variable, proportions were calculated from these variables slightly differently depending on the response option group. In the RFG-judgement group, simple proportions were created from the total number of R responses and the total number of F responses. In the RFBG condition, however, the proportion of Both responses was separately added to R proportions and F proportions. Additional DVs included: i) d’ (d-prime, a signal detection measure of sensitivity); ii) c-value (a measure of response bias); iii) overall accuracy (hits / (hits + FAs)); iv) reaction times for all responses.

Participants were excluded from analysis if they showed poor performance during the encoding task; the relative ease of reporting whether each item was shown as a word, drawing, or photograph prompted a performance cut off of 90% accuracy. This allowed for some accidental clicks / incorrect responses toward potentially ambiguous items, though subjects scoring less than 90% were excluded on the assumption they did not dedicate their full attention to the task. Subjects with extreme z-scores were also excluded from analysis; those presenting z-scores of +/- 3 (for total hits, total FAs, or overall recognition [hits minus FAs]) were considered outliers. These criteria resulted in the exclusion of 14 datasets.

Results

A series of 3x2 repeated measures ANOVAs were conducted on each of the DVs using a within-subjects factor of stimuli format (photographs / drawings / words) and a between-subjects factor of response option (RFG / RFBG). Significant main effects and interaction effects were followed-up with Bonferroni-adjusted pairwise comparisons.

Overall hits, false alarms (FAs), and recognition

Separate 3 (stimuli format: words, drawings, photographs) x 2 (response-option condition: RFG-judgments, RFBG-judgements) mixed ANOVAs were conducted on the mean proportion of hits and false alarms (FAs; see Table 7).

Table 7: Mean proportion of hits and FAs by stimuli format and response-option condition.

 

For the proportion of total hits, there was a significant main effect of stimuli format [\(F(1.75, 273.58) = 229.89\), \(\mathit{MSE} = 0.02\), \(p < .001\)]. The interaction effect was not significant [\(F(1.75, 273.58) = 0.74\), \(\mathit{MSE} = 0.02\), \(p = .461\)]. Post-hoc comparisons for the main effect of stimuli format showed that photographs (\(M = 0.86\)) produced a significantly higher proportion of hits than both words (\(M = 0.55\)) [] and drawings (\(M = 0.76\)) []. Drawings (\(M = 0.76\)) also produced a significantly higher proportion of hits compared to words (\(M = 0.55\)) [].

There was also a significant main effect of stimuli format for the proportion of total FAs [\(F(1.46, 227.29) = 106.64\), \(\mathit{MSE} = 0.01\), \(p < .001\)]; photographs (\(M = 0.05\)) produced a significantly lower proportion of FAs than both words (rexp3_ apa__grey__anova__PROP.FA__words.mean) [] and drawings (\(M = 0.09\)) []; drawings (\(M = 0.09\)) produced a significantly lower proportion of FAs compared to words (\(M = 0.21\)) []. The interaction effect was not significant [\(F(1.46, 227.29) = 1.22\), \(\mathit{MSE} = 0.01\), \(p = .287\)].

For overall performance accuracy, there was a significant main effect of stimuli format [\(F(1.93, 300.97) = 586.13\), \(\mathit{MSE} = 0.02\), \(p < .001\)]. The interaction effect was not significant [\(F(1.93, 300.97) = 2.02\), \(\mathit{MSE} = 0.02\), \(p = .136\)]. Post-hoc comparisons for the main effect of stimuli format showed that photographs (\(M = 0.81\)) produced significantly better performance accuracy than both words (\(M = 0.34\)) [] and drawings (\(M = 0.67\)) []. Drawings (\(M = 0.67\)) also produced significantly better performance accuracy compared to words (\(M = 0.34\)) [].

Discrimination (d’) and response bias (c)

To assess the roles of discrimination and response bias, separate 3 (stimuli format: words, drawings, photographs) x 2 (response-option condition: RFG-judgements, RFBG-judgements) mixed ANOVAs were conducted on the values of d’ (d-prime; measure of sensitivity) and c (decision criterion; see Table 8).

Table 8: d’ and c values by stimuli format and response-option condition.

 

For d’ scores, there was a significant interaction between stimuli format and response-option [\(F(2.00, 311.73) = 3.60\), \(\mathit{MSE} = 0.26\), \(p = .029\)] (see Figure 10). Photographs (\(M = 2.86\)) facilitated better discrimination between hits / FAs than both words (\(M = 1.13\)) [\(t(312.00) = -21.66\), \(p < .001\)] and drawings (\(M = 2.13\)) [\(t(312) = -9.13\), \(p < .001\)] in the RFG group. Drawings (\(M = 2.13\)) also showed significantly higher d’ scores compared to words (\(M = 1.13\)) [\(t(312) = -12.53\), \(p < .001\)]. In the RFBG group, the same pattern was evident; photographs (\(M = 2.69\)) facilitated better discrimination than both words (\(M = 0.98\)) [\(t(312) = -20.79\), \(p < .001\)] and drawings (\(M = 2.24\)) [\(t(312) = -5.53\), \(p < .001\)]. Again, drawings (\(M = 2.24\)) also showed significantly higher d’ scores than words (\(M = 0.98\)) [\(t(319.09) = -10.22\), \(p < .001\)].

Comparisons of stimuli format across the response-option groups showed that d’ scores for photographs did not significantly differ between the RFG (\(M = 2.86\)) and RFBG (\(M = 2.69\)) conditions [\(t(319.09) = 1.43\), \(p > .999\)], nor for drawings (RFG: \(M = 2.13\), RFBG: \(M = 2.24\), [\(t(319.09) = -0.96\), \(p > .999\)], nor for words (RFG: \(M = 1.13\), RFBG: \(M = 0.98\), [\(t(319.09) = 1.39\), \(p > .999\)]).

 

Figure 11: Interaction plot between stimuli format and response-option for d’ scores.

c-scores showed a significant main effect of stimuli format [\(F(1.74, 272.11) = 10.25\), \(\mathit{MSE} = 0.13\), \(p < .001\)], with photographs (\(M = 0.22\)) demonstrating significantly lower c-scores (and thus a less conservative response bias) than words (\(M = 0.39\)) [] and drawings (\(M = 0.32\)) []. Photographs may have uniquely provided subjects with additional confidence that their old/new response was correct in comparison to the other stimuli formats; there was no difference in c-scores between drawings (\(M = 0.32\)) and words (\(M = 0.39\)) []. There were no significant interaction effects [\(F(1.74, 272.11) = 0.62\), \(\mathit{MSE} = 0.13\), \(p = .518\)].

Hits assigned Recollection, Familiarity, and Guessing

To determine the effects of stimuli format and response-option on accurate recognition memory judgements, separate 3 (stimuli format: words, drawings, photographs) x 2 (response-option condition: RFG-judgements, RFBG-judgements) mixed ANOVAs were conducted on the mean proportion of hits assigned Recollection, Familiarity, and Guessing (see Figure 12).

Figure 12: Proportion of hits assigned Recollection, Familiarity, and Guessing, by stimuli format and response-option condition.

Recollection (hits)

For hits assigned Recollection, there was a significant interaction effect [\(F(1.77, 273.98) = 5.32\), \(\mathit{MSE} = 0.03\), \(p = .007\)] (see Figure 13). Photographs (\(M = 0.79\)) resulted in more Recollection hits than both words (\(M = 0.34\)) [\(t(310) = -17.90\), \(p < .001\)] and drawings (\(M = 0.63\)) [\(t(310) = -6.38\), \(p < .001\)] in the RFG group. Drawings (\(M = 0.63\)) also resulted in more Recollection hits than words (\(M = 0.34\)) [\(t(310) = -11.52\), \(p < .001\)] in the RFG group. In the RFBG group, there was an identical pattern; photographs (\(M = 0.79\)) resulted in more Recollection hits than both words (\(M = 0.46\)) [\(t(310) = -12.62\), \(p < .001\)] and drawings (\(M = 0.69\)) [\(t(310) = -3.59\), \(p = .006\)]. Drawings (\(M = 0.69\)) also resulted in more Recollection hits than words (\(M = 0.46\)) [\(t(310) = -9.03\), \(p < .001\)] in the RFBG group. Comparisons of stimuli format across the response-option groups showed no difference in the number of Recollection hits for photograph stimuli between the RFG (\(M = 0.79\)) and RFBG (\(M = 0.79\)) conditions [\(t(278.97) = 0.05\), \(p > .999\)]. The same pattern was evident for drawings (RFG: \(M = 0.63\), RFBG: \(M = 0.69\) [\(t(278.97) = -1.62\), \(p > .999\)]). Word stimuli, however, produced significantly more Recollection hits in the RFBG group (\(M = 0.46\)) compared to the RFG (\(M = 0.34\)) group [\(t(278.97) = -2.94\), \(p = .053\)].

 

Figure 13: Interaction plot between stimuli format and response-option for the mean proportion of hits assigned Recollection.

Familiarity (hits)

For hits assigned Familiarity, there was a significant interaction between stimuli format and response-option [\(F(1.52, 236.21) = 8.68\), \(\mathit{MSE} = 0.04\), \(p = .001\)] (see Figure 14). Within the RFG condition, words (\(M = 0.45\)) resulted in more Familiarity hits than both drawings (\(M = 0.28\)) [\(t(310) = 5.84\), \(p < .001\)] and photographs (\(M = 0.17\)) [\(t(310) = 9.80\), \(p < .001\)]. Drawings (\(M = 0.28\)) also produced more Familiarity hits compared to photographs (\(M = 0.17\)) [\(t(310) = 3.96\), \(p = .001\)].

Within the RFBG condition, words (\(M = 0.54\)) still produced more Familiarity hits than photographs (\(M = 0.43\)) [\(t(310) = 3.61\), \(p = .005\)]. However, there was no difference in the number of Familiarity hits when comparing words (\(M = 0.54\)) to drawings (\(M = 0.46\)) [\(t(310) = 2.53\), \(p = .178\)]. Another difference from the within-RFG findings is the number of Familiarity hits for drawings (\(M = 0.46\)) did not differ from photographs (\(M = 0.43\)) in the RFBG condition [\(t(310) = 1.08\), \(p > .999\)].

Comparisons across response-option conditions showed that drawings produced significantly more Familiarity hits in the RFBG (\(M = 0.46\)) condition compared to RFG (\(M = 0.28\)) [\(t(289.15) = -4.14\), \(p = .001\)]. A similar pattern was also evident for photographs (RFG: \(M = 0.17\), RFBG: \(M = 0.43\) [\(t(289.15) = -6.00\), \(p < .001\)]). Words, however, showed no difference in the number of Familiarity hits between the RFG (\(M = 0.45\)) and RFBG (\(M = 0.54\)) conditions [\(t(289.15) = -2.06\), \(p = .611\)].

 

Figure 14: Interaction plot between stimuli format and response-option for the mean proportion of hits assigned ‘Familiarity’.

Guessing (hits)

For hits assigned Guessing, there was a significant main effect of stimuli format [\(F(1.32, 204.20) = 71.22\), \(\mathit{MSE} = 0.02\), \(p < .001\)]. The interaction effect was not significant [\(F(1.32, 204.20) = 1.12\), \(\mathit{MSE} = 0.02\), \(p = .308\)]. Post-hoc comparisons for the main effect of stimuli format showed that words (\(M = 0.18\)) produced significantly more Guessing hits than both drawings (\(M = 0.08\)) [] and photographs (\(M = 0.03\)) []. Drawings (\(M = 0.08\)) also produced significantly more Guessing hits compared to photographs (\(M = 0.03\)) [].

FAs assigned Recollection, Familiarity, and Guessing

To determine the effects of stimuli format and response-option on false alarms, separate 3 (stimuli format: words, drawings, photographs) x 2 (response-option condition: RFG-judgements, RFBG-judgements) mixed ANOVAs were conducted on the mean proportion of FAs assigned Recollection, Familiarity, and Guessing (see Figure 15).

Figure 15: Proportion of FAs assigned Recollection, Familiarity, and Guessing, by stimuli format and response-option condition.

Recollection (FAs)

For FAs assigned Recollection, there was no significant main effect of stimuli format [\(F(1.94, 301.96) = 1.11\), \(\mathit{MSE} = 0.07\), \(p = .328\)] or interaction [\(F(1.94, 301.96) = 2.02\), \(\mathit{MSE} = 0.07\), \(p = .136\)].

Familiarity (FAs)

For FAs assigned Familiarity, there was a significant interaction between stimuli format and response-option [\(F(1.98, 309.33) = 3.33\), \(\mathit{MSE} = 0.11\), \(p = .038\)] (see Figure 16). Within the RFG condition, words (\(M = 0.41\)) resulted in more Familiarity FAs than photographs (\(M = 0.26\)) [\(t(312) = 2.96\), \(p = .050\)], but not drawings (\(M = 0.40\)) [\(t(312) = 0.20\), \(p > .999\)]. The number of Familiarity FAs did not differ between drawings (\(M = 0.40\)) and photographs (\(M = 0.26\)) [\(t(312) = 2.76\), \(p = .091\)] in the RFG condition.

Within the RFBG condition, words (\(M = 0.47\)) again produced more Familiarity FAs than photographs (\(M = 0.30\)) [\(t(312) = 3.06\), \(p = .036\)]. However, words (\(M = 0.47\)) also produced more Familiarity FAs than drawings(\(M = 0.28\)) [\(t(312) = 3.39\), \(p = .012\)]. As before, the number of Familiarity FAs did not differ between drawings (\(M = 0.28\)) and photographs (\(M = 0.30\)) in the RFBG condition [\(t(312) = -0.33\), \(p > .999\)].

Comparisons across response-option conditions showed no differences in the number of Familiarity FAs, for any stimuli format: words (RFG: \(M = 0.41\), RFBG: \(M = 0.47\) [\(t(404.98) = -0.86\), \(p > .999\)]); drawings (RFG: \(M = 0.40\), RFBG: \(M = 0.28\) [\(t(404.98) = 1.91\), \(p = .859\)]; photographs (RFG: \(M = 0.26\), RFBG: \(M = 0.30\) [\(t(404.98) = -0.68\), \(p > .999\)]).

 

Figure 16: Interaction plot between stimuli format and response-option for the mean proportion of FAs assigned ‘Familiarity’.

Guessing (FAs)

For FAs assigned Guessing, there was a significant main effect of stimuli format [\(F(1.93, 300.68) = 9.44\), \(\mathit{MSE} = 0.09\), \(p < .001\)]. The interaction effect was not significant [\(F(1.93, 300.68) = 0.35\), \(\mathit{MSE} = 0.09\), \(p = .699\)]. Post-hoc comparisons for the main effect of stimuli format showed that words (\(M = 0.27\)) produced significantly more Guessing FAs than both drawings (\(M = 0.18\)) [] and photographs (\(M = 0.13\)) []. There was no difference in the proportion of FAs assigned Guessing between drawings (\(M = 0.18\)) and photographs (\(M = 0.13\)) [].

Discussion

Across a range of performance variables, the results show a clear effect of stimuli distinctiveness. As distinctiveness increased (from words, to drawings, to photographs), this produced more hits, less FAs, better overall recognition, and better discrimination between hits / FAs. The absence of any interaction effects across these variables demonstrates that the availability of different response options (i.e. the addition of a Both option) had little impact on overall performance. RF(B)G responses for accurate recognition displayed a similar pattern; as distinctiveness increased, the number of Recollected hits also increased, while the number of Familiarity and Guessing hits decreased. The rate of both Familiarity FAs and Guessing FAs was also highest for the least distinctive stimuli (words).

Chapter 4 (Addition of colour)

References

Adlington, R. L., Laws, K. R., & Gale, T. M. (2009). The Hatfield Image Test (HIT): A new picture test and norms for experimental and clinical use. Journal of Clinical and Experimental Neuropsychology, 31(6), 731–753. https://doi.org/10.1080/13803390802488103

Algarabel, S., Fuentes, M., Escudero, J., Pitarque, A., Peset, V., Mazón, J.-F., & Meléndez, J.-C. (2012). Recognition memory deficits in mild cognitive impairment. Aging, Neuropsychology, and Cognition, 19(5), 608–619. https://doi.org/10.1080/13825585.2011.640657

Ally, B. A. (2012). Using Pictures and Words To Understand Recognition Memory Deterioration in Amnestic Mild Cognitive Impairment and Alzheimer’s Disease: A Review. Current Neurology and Neuroscience Reports, 12(6), 687–694. https://doi.org/10.1007/s11910-012-0310-7

Ally, B. A., Gold, C. A., & Budson, A. E. (2009). The picture superiority effect in patients with Alzheimer’s disease and mild cognitive impairment. Neuropsychologia, 47(2), 595–598. https://doi.org/10.1016/j.neuropsychologia.2008.10.010

Barba, G. D. (1997). Recognition Memory and Recollective Experience in Alzheimer’s Disease. Memory, 5(6), 657–672. https://doi.org/10.1080/741941546

Belleville, S. (2011). Impact of novelty and type of material on recognition in healthy older adults and persons with mild cognitive impairment. 10.

Bermúdez-Margaretto, B., Beltrán, D., Cuetos, F., & Domínguez, A. (2018). Brain Signatures of New (Pseudo-) Words: Visual Repetition in Associative and Non-associative Contexts. Frontiers in Human Neuroscience, 12, 354. https://doi.org/10.3389/fnhum.2018.00354

Biederman, I. (1987). Recognition-by-Components: A Theory of Human Image Understanding. 33.

Bowen, H. J., Fields, E. C., & Kensinger, E. A. (2019). Prior Emotional Context Modulates Early Event-Related Potentials to Neutral Retrieval Cues. Journal of Cognitive Neuroscience, 31(11), 1755–1767. https://doi.org/10.1162/jocn_a_01451

Cui, L., Shi, G., He, F., Zhang, Q., Oei, T. P. S., & Guo, C. (2016). Electrophysiological Correlates of Emotional Source Memory in High-Trait-Anxiety Individuals. Frontiers in Psychology, 7. https://doi.org/10.3389/fpsyg.2016.01039

Deason, R. G., Hussey, E. P., Flannery, S., & Ally, B. A. (2015). Preserved conceptual implicit memory for pictures in patients with Alzheimer’s disease. Brain and Cognition, 99, 112–117. https://doi.org/10.1016/j.bandc.2015.07.008

Dewhurst, S. A., & Conway, M. A. (1994). Pictures, Images, and Recollective Experience. 11.

Embree, L. M., Budson, A. E., & Ally, B. A. (2012). Memorial familiarity remains intact for pictures but not for words in patients with amnestic mild cognitive impairment. Neuropsychologia, 50(9), 2333–2340. https://doi.org/10.1016/j.neuropsychologia.2012.06.001

Ensor, T. M., Bancroft, T. D., & Hockley, W. E. (2019). Listening to the Picture-Superiority Effect. Experimental Psychology, 20.

Herzmann, G., Minor, G., & Curran, T. (2018). Neural evidence for the contribution of holistic processing but not attention allocation to the other-race effect on face memory. Cognitive, Affective, & Behavioral Neuroscience, 18(5), 1015–1033. https://doi.org/10.3758/s13415-018-0619-z

Hockley, W. E. (2008). The picture superiority effect in associative recognition. Memory & Cognition, 36(7), 1351–1359. https://doi.org/10.3758/MC.36.7.1351

Koen, J. D., & Yonelinas, A. P. (2014). The Effects of Healthy Aging, Amnestic Mild Cognitive Impairment, and Alzheimer’s Disease on Recollection and Familiarity: A Meta-Analytic Review. 41.

Lombardi, M. G., Perri, R., Fadda, L., Caltagirone, C., & Carlesimo, G. A. (2016). Forgetting of the recollection and familiarity components of recognition in patients with amnestic mild cognitive impairment. Journal of Neuropsychology, 12(2), 231–247. https://doi.org/10.1111/jnp.12114

Martins, C. A. R., & Lloyd-Jones, T. J. (2006). Preserved Conceptual Priming in Alzheimer’s Disease. Cortex, 42(7), 995–1004. https://doi.org/10.1016/S0010-9452(08)70205-3

McBride, D. M., & Anne Dosher, B. (2002). A comparison of conscious and automatic memory processes for picture and word stimuli: A process dissociation analysis. Consciousness and Cognition, 11(3), 423–460. https://doi.org/10.1016/S1053-8100(02)00007-7

Meade, M. E., Ahmad, M., & Fernandes, M. A. (2019). Drawing pictures at encoding enhances memory in healthy older adults and in individuals with probable dementia. Aging, Neuropsychology, and Cognition, 27(6), 880–901. https://doi.org/10.1080/13825585.2019.1700899

Migo, E. M., Mayes, A. R., & Montaldi, D. (2012). Measuring recollection and familiarity: Improving the remember/know procedure. Consciousness and Cognition, 21(3), 1435–1455. https://doi.org/10.1016/j.concog.2012.04.014

Moreno-Martínez, F. J., & Montoro, P. R. (2012). An Ecological Alternative to Snodgrass & Vanderwart: 360 High Quality Colour Images with Norms for Seven Psycholinguistic Variables. PLoS ONE, 7(5), e37527. https://doi.org/10.1371/journal.pone.0037527

Peirce, J., Gray, J. R., Simpson, S., MacAskill, M., Höchenberger, R., Sogo, H., Kastman, E., & Lindeløv, J. K. (2019). PsychoPy2: Experiments in behavior made easy. Behavior Research Methods, 51(1), 195–203. https://doi.org/10.3758/s13428-018-01193-y

Pitarque, A. (2016). The effects of healthy aging, amnestic mild cognitive impairment, and Alzheimer’s disease on recollection, familiarity and false recognition, estimated by an associative process-dissociation recognition procedure. 7.

Rajaram, S. (1996). Perceptual Effects on Remembering: Recollective Processes in Picture Recognition Memory. 13.

Rajaram, S. (1993). Remembering and knowing: Two means of access to the personal past. Memory & Cognition, 21(1), 89–102. https://doi.org/10.3758/BF03211168

Rollins, L., & Riggins, T. (2018). Age-related differences in subjective recollection: ERP studies of encoding and retrieval. Developmental Science, 21(3), e12583. https://doi.org/10.1111/desc.12583

Rossion, B., & Pourtois, G. (2004). Revisiting Snodgrass and Vanderwart’s Object Pictorial Set: The Role of Surface Detail in Basic-Level Object Recognition. Perception, 33(2), 217–236. https://doi.org/10.1068/p5117

Sanfeliu, M. C., & Fernandez, A. (1996). A set of 254 Snodgrass-Vanderwart pictures standardized for Spanish: Norms for name agreement, image agreement, familiarity, and visual complexity. Behavior Research Methods, Instruments, & Computers, 28(4), 537–555. https://doi.org/10.3758/BF03200541

Schmitter-Edgecombe, M., Woo, E., & Greeley, D. R. (2009). Characterizing multiple memory deficits and their relation to everyday functioning in individuals with mild cognitive impairment. Neuropsychology, 23(2), 168–177. https://doi.org/10.1037/a0014186

Schoemaker, D., Gauthier, S., & Pruessner, J. C. (2014). Recollection and Familiarity in Aging Individuals with Mild Cognitive Impairment and Alzheimer’s Disease: A Literature Review. Neuropsychol Rev, 19.

Snodgrass, J. G., & Vanderwart, M. (1980). A Standardized Set of 260 Pictures: Norms for Name Agreement, Image Agreement, Familiarity, and Visual Complexity. Journal of Experimental Psychology: Human Learning and Memory, 6(2), 174–215.

Stenberg, G. (2006). Conceptual and perceptual factors in the picture superiority effect. European Journal of Cognitive Psychology, 18(6), 813–847. https://doi.org/10.1080/09541440500412361

Székely, A., D’Amico, S., Devescovi, A., Federmeier, K., Herron, D., Iyer, G., Jacobsen, T., & Bates, E. (2003). Timed picture naming: Extended norms and validation against previous studies. Behavior Research Methods, Instruments, & Computers, 35(4), 621–633. https://doi.org/10.3758/BF03195542

Tanaka, J., Weiskopf, D., & Williams, P. (2001). The role of color in high-level vision. TRENDS in Cognitive Sciences, 5(5), 211–215.

Tarr, M. J., & Bülthoff, H. H. (1998). Image-based object recognition in man, monkey and machine. Cognition, 67(1-20).

Troyer, A. K., Murphy, K. J., Anderson, N. D., Craik, F. I. M., Moscovitch, M., Maione, A., & Gao, F. (2012). Associative recognition in mild cognitive impairment: Relationship to hippocampal volume and apolipoprotein E. Neuropsychologia, 50(14), 3721–3728. https://doi.org/10.1016/j.neuropsychologia.2012.10.018

Troyer, A. K., Vandermorris, S., & Murphy, K. J. (2016). Intraindividual variability in performance on associative memory tasks is elevated in amnestic mild cognitive impairment. Neuropsychologia, 90, 110–116. https://doi.org/10.1016/j.neuropsychologia.2016.06.011

Tsaparina, D., Bonin, P., & Méot, A. (2011). Russian norms for name agreement, image agreement for the colorized version of the Snodgrass and Vanderwart pictures and age of acquisition, conceptual familiarity, and imageability scores for modal object names. Behavior Research Methods, 43(4), 1085–1099. https://doi.org/10.3758/s13428-011-0121-9

van der Meulen, M., Lederrey, C., Rieger, S. W., van Assche, M., Schwartz, S., Vuilleumier, P., & Assal, F. (2012). Associative and Semantic Memory Deficits in Amnestic Mild Cognitive Impairment as Revealed by Functional Magnetic Resonance Imaging: Cognitive and Behavioral Neurology, 25(4), 195–215. https://doi.org/10.1097/WNN.0b013e31827de67f

Viggiano, M. P., Vannucci, M., & Righi, S. (2004). A New Standardized Set of Ecological Pictures for Experimental and Clinical Research on Visual Object Processing. Cortex, 40(3), 491–509. https://doi.org/10.1016/S0010-9452(08)70142-4

Wagner, A. D., Gabrieli, J. D. E., & Verfaellie, M. (1997). Dissociations Between Familiarity Processes in Explicit Recognition and Implicit Perceptual Memory. 19.

Wammes, J. D., Meade, M. E., & Fernandes, M. A. (2016). The drawing effect: Evidence for reliable and robust memory benefits in free recall. Quarterly Journal of Experimental Psychology, 69(9), 1752–1776. https://doi.org/10.1080/17470218.2015.1094494

Wang, P., Li, J., Li, H., Li, B., Yang Jiang, Bao, F., & Zhang, S. (2013). Is emotional memory enhancement preserved in amnestic mild cognitive impairment? Evidence from separating recollection and familiarity. Neuropsychology, 27(6), 691–701. https://doi.org/10.1037/a0033973

Weldon, M. S., Iii, H. L. R., & Challis, B. H. (1989). The properties of retrieval cues constrain the picture superiority effect. 11.

Weldon, M. S., & Roediger, H. L. (1987). Altering retrieval demands reverses the picture superiority effect. 12.

Westerberg, C., Mayes, A., Florczak, S. M., Chen, Y., Creery, J., Parrish, T., Weintraub, S., Mesulam, M.-M., Reber, P. J., & Paller, K. A. (2013). Distinct medial temporal contributions to different forms of recognition in amnestic mild cognitive impairment and Alzheimer’s disease. Neuropsychologia, 51(12), 2450–2461. https://doi.org/10.1016/j.neuropsychologia.2013.06.025

Whitehouse, A. J. O., Maybery, M. T., & Durkin, K. (2006). The development of the picture-superiority effect. British Journal of Developmental Psychology, 24(4), 767–773. https://doi.org/10.1348/026151005X74153

Wolk, D. A., Dunfee, K. L., Dickerson, B. C., Aizenstein, H. J., & DeKosky, S. T. (2011). A medial temporal lobe division of labor: Insights from memory in aging and early Alzheimer disease. Hippocampus, 21(5), 461–466. https://doi.org/10.1002/hipo.20779

Wolk, D. A., Mancuso, L., Kliot, D., Arnold, S. E., & Dickerson, B. C. (2013). Familiarity-based memory as an early cognitive marker of preclinical and prodromal AD. Neuropsychologia, 51(6), 1094–1102. https://doi.org/10.1016/j.neuropsychologia.2013.02.014

Wolk, D. A., Signoff, E. D., & DeKosky, S. T. (2008). Recollection and familiarity in amnestic mild cognitive impairment: A global decline in recognition memory. Neuropsychologia, 46(7), 1965–1978. https://doi.org/10.1016/j.neuropsychologia.2008.01.017

Yonelinas, A. P. (2002). The Nature of Recollection and Familiarity: A Review of 30 Years of Research. Journal of Memory and Language, 46(3), 441–517. https://doi.org/10.1006/jmla.2002.2864

Yoon, C., Feinberg, F., Luo, T., Hedden, T., Gutchess, A. H., Chen, H.-Y. M., Mikels, J. A., Jiao, S., & Park, D. C. (2004). A cross-culturally standardized set of pictures for younger and older adults: American and Chinese norms for name agreement, concept agreement, and familiarity. Behavior Research Methods, Instruments, & Computers, 36(4), 639–649. https://doi.org/10.3758/BF03206545

Appendices

Appendix A

Table 9: Spelling corrections / manipulations to naming responses.

Appendix B

Table 10: Normative data for all photograph items.

LS0tCm91dHB1dDoKICAjd29yZF9kb2N1bWVudDoKICAjICB0b2M6IHllcwogICMgIHRvY19kZXB0aDogJzQnCiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogeWVzCiAgICB0b2NfZGVwdGg6IDQKICAgIG51bWJlcl9zZWN0aW9uczogbm8KICAgIGZpZ19jYXB0aW9uOiB5ZXMKICAgIGxhdGV4X2VuZ2luZTogeGVsYXRleAptYWluZm9udDogSGVsdmV0aWNhCmZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EgTmV1ZQpmb250c2l6ZTogMTFwdApnZW9tZXRyeTogbGVmdD0zNW1tLCByaWdodD0yMG1tLCB0b3A9MzBtbSwgYm90dG9tPTMwbW0KYmlibGlvZ3JhcGh5OiByZXNvdXJjZXMvcmVmcy5iaWIKY3NsOiByZXNvdXJjZXMvYXBhLmNzbApzdWJwYXJhZ3JhcGg6IHllcwpoZWFkZXItaW5jbHVkZXM6Ci0gXHVzZXBhY2thZ2V7ZmFuY3loZHJ9Ci0gXHBhZ2VzdHlsZXtmYW5jeX0KLSBccmVuZXdjb21tYW5ke1xoZWFkcnVsZXdpZHRofXsxLjVwdH0KLSBcc2V0bGVuZ3Roe1xoZWFkaGVpZ2h0fXsxMy41OTk5OXB0fQotIFxyZW5ld2NvbW1hbmR7XGhyZWZ9WzJdeyMyXGZvb3Rub3Rle1x1cmx7IzF9fX0KLSBcdXNlcGFja2FnZXtwZGZsc2NhcGV9Ci0gXG5ld2NvbW1hbmR7XGJsYW5kc2NhcGV9e1xiZWdpbntsYW5kc2NhcGV9fQotIFxuZXdjb21tYW5ke1xlbGFuZHNjYXBlfXtcZW5ke2xhbmRzY2FwZX19Ci0gXHVzZXBhY2thZ2V7dGl0bGVzZWN9Ci0gXHRpdGxlc3BhY2luZ3tcc2VjdGlvbn17MHB0fXsxMnB0IHBsdXMgMnB0IG1pbnVzIDFwdH17MHB0IHBsdXMgMXB0IG1pbnVzIDFwdH0KLSBcdGl0bGVzcGFjaW5ne1xzdWJzZWN0aW9ufXswcHR9ezEycHQgcGx1cyAycHQgbWludXMgMXB0fXswcHQgcGx1cyAxcHQgbWludXMgMXB0fQotIFx0aXRsZXNwYWNpbmd7XHN1YnN1YnNlY3Rpb259ezBwdH17MTJwdCBwbHVzIDJwdCBtaW51cyAxcHR9ezBwdCBwbHVzIDFwdCBtaW51cyAxcHR9Ci0tLQoKYGBge3IgbG9hZC1wYWNrYWdlcywgaW5jbHVkZT1GQUxTRSwgY2FjaGU9RkFMU0V9CiMjICBDbGVhciBlbnZpcm9ubWVudCBhbmQgbGlzdCByZXF1aXJlZCBwYWNrYWdlczoKICAgIHJtKGxpc3Q9bHMoKSkgIAogICAgcmVxdWlyZWRfcGFja2FnZXMgPC0gYygidGlkeXZlcnNlIiwgImRwbHlyIiwgImNhcHRpb25lciIsICJ0aW55dGV4IiwgImthYmxlRXh0cmEiLCAiZm9ybWF0dGFibGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWRyIiwgImlyciIsICJwc3ljaG8iLCAiYWZleCIsICJlbW1lYW5zIiwgImphbml0b3IiKQogICAgcGFja2FnZXNfdG9faW5zdGFsbCA8LSByZXF1aXJlZF9wYWNrYWdlc1shKHJlcXVpcmVkX3BhY2thZ2VzICVpbiUgaW5zdGFsbGVkLnBhY2thZ2VzKClbLCJQYWNrYWdlIl0pXQogICAgaWYobGVuZ3RoKHBhY2thZ2VzX3RvX2luc3RhbGwpKSBpbnN0YWxsLnBhY2thZ2VzKHBhY2thZ2VzX3RvX2luc3RhbGwpCiAgICBpbnZpc2libGUoc3VwcHJlc3NQYWNrYWdlU3RhcnR1cE1lc3NhZ2VzKGxhcHBseShyZXF1aXJlZF9wYWNrYWdlcywgbGlicmFyeSwgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkpCiMjICBEZWZpbmUgb3duIGZ1bmN0aW9uOgogICAgY29hbGVzY2VfYnlfY29sdW1uIDwtIGZ1bmN0aW9uKGRmKSB7cmV0dXJuKGRwbHlyOjpjb2FsZXNjZSghISEgYXMubGlzdChkZikpKX0KIyMgIENhcHRpb25lcjoKICAgIGZpZ3VyZV9udW1iZXJpbmcgPC0gY2FwdGlvbmVyKCkKICAgIHRhYmxlX251bWJlcmluZyA8LSBjYXB0aW9uZXIocHJlZml4ID0gIlRhYmxlIikKYGBgCgpcbmV3cGFnZQojIENoYXB0ZXIgMQojIyBMaXQgUmV2aWV3CgpcbmV3cGFnZQojIENoYXB0ZXIgMgojIyBFeHBlcmltZW50IDEgKFByb29mIG9mIGNvbmNlcHQpCgpUaGUgb2JqZWN0aXZlIG9mIEV4cGVyaW1lbnQgMSB3YXMgdG8gZXN0YWJsaXNoIGJhc2VsaW5lIFBTRSByZXNwb25zZSBwYXR0ZXJucyBpbiB5b3VuZ2VyIGFkdWx0cywgYW5kIGV4YW1pbmUgaG93IFBTRSBtYWduaXR1ZGVzIGRpZmZlciBhY3Jvc3MgdGhlIHRocmVlIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb25zIChSRi1qdWRnbWVudHMgLyBSRkItanVkZ21lbnRzIC8gUkYtUmF0aW5ncykuIEEgMngzIG1peGVkIGZhY3RvcmlhbCBkZXNpZ24gd2FzIHV0aWxpc2VkLCBjb25zaXN0aW5nIG9mIGEgd2l0aGluLXN1YmplY3RzIHZhcmlhYmxlIG9mIHN0aW11bHVzIHR5cGUgKHdvcmRzIC8gZ3JleS1zY2FsZSBsaW5lLWRyYXdpbmdzKSBhbmQgYSBiZXR3ZWVuLXN1YmplY3RzIHZhcmlhYmxlIG9mIHJlc3BvbnNlLW9wdGlvbiAoUkYtanVkZ21lbnRzIC8gUkZCRy1qdWRnbWVudHMgLyBSRi1SYXRpbmdzKS4KCmBgYHtyIGV4cGVyaW1lbnQtMS1tYWluLCBpbmNsdWRlPUZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGNhY2hlPVRSVUV9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIEVYUEVSSU1FTlQgMTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICBJbXBvcnQgdW5pcXVlIGltYWdlIFVSTHMgKHRvIGlkZW50aWZ5IGVhY2ggc3RpbSk6CmV4cDFfX2ltYWdlX3VybHMgPC0gcmVhZF9jc3YoIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfMS9pbWFnZV91cmxzLmNzdiIpICU+JQogIG11dGF0ZSh1cmwgPSBzdHJfcmVwbGFjZSh1cmwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczpcXC9cXC9rZWVsZXBzeWNoLmNvMS5xdWFsdHJpY3MuY29tXFwvQ29udHJvbFBhbmVsXFwvR3JhcGhpYy5waHBcXD9JTT1JTV8iLCAiIikpCgojIyAgSW1wb3J0IHN0dWR5IGRhdGEgKHdoaWNoIGNvbnRhaW5zIGRlbW9ncmFwaGljcyBpbmZvKTogICAgICAgICAgICAgICAgICAgICAgICAgICAgCmV4cDFfX3BhcnRpY2lwYW50X2luZm8gPC0gcmVhZF9jc3YoCiAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfMS9leHBlcmltZW50XzFfZGF0YS9KYW1pZSAtIFJGRyBJbWFnZXMgKDEpIC0gU1RVRFlfTWFyY2ggMTksIDIwMjBfMDYuMjguY3N2IikgJT4lCiAgc2VsZWN0KC0iU3RhcnREYXRlIiwgLSJFbmREYXRlIiwgLSJTdGF0dXMiLCAtIkR1cmF0aW9uIChpbiBzZWNvbmRzKSIsIC0iRmluaXNoZWQiLAogICAgICAgICAtIlJlY2lwaWVudExhc3ROYW1lIiwgLSJSZWNpcGllbnRGaXJzdE5hbWUiLCAtIlJlY2lwaWVudEVtYWlsIiwgLSJFeHRlcm5hbFJlZmVyZW5jZSIsCiAgICAgICAgIC0iTG9jYXRpb25MYXRpdHVkZSIsIC0iTG9jYXRpb25Mb25naXR1ZGUiLCAtIkRpc3RyaWJ1dGlvbkNoYW5uZWwiLCAtIlVzZXJMYW5ndWFnZSIsIC0iUTEuMyIsCiAgICAgICAgIC0iUTEuNCIsIC0iUTEwMCIsIC0iUTEwMSIsIC1jb250YWlucygiTGFzdCBDbGljayIpLCAtY29udGFpbnMoIlBhZ2UgU3VibWl0IiksIAogICAgICAgICAtY29udGFpbnMoIkNsaWNrIENvdW50IiksIC1jb250YWlucygiUTQuNSIpLCAtY29udGFpbnMoIlE1LjUiKSwgLWNvbnRhaW5zKCJRNi41IiksCiAgICAgICAgIC1jb250YWlucygiUTcuNSIpLCAtY29udGFpbnMoIlE4LjUiKSwgLWNvbnRhaW5zKCJROS41IiksIC1jb250YWlucygiUTEwLjUiKSwgLWNvbnRhaW5zKCJRMTEuNSIpLAogICAgICAgICAtY29udGFpbnMoIlExMi41IiksIC1jb250YWlucygiUTEzLjUiKSwgLWNvbnRhaW5zKCJRMTQuNSIpLCAtY29udGFpbnMoIlExNS41IiksIAogICAgICAgICAtY29udGFpbnMoIlExNi41IiksIC1jb250YWlucygiUTE3LjUiKSkgJT4lCiAgcm93X3RvX25hbWVzKHJvd19udW1iZXIgPSAxKSAlPiUKICBzbGljZSgtMSkgJT4lCiAgcmVuYW1lKGlwID0gIklQIEFkZHJlc3MiLCBwcm9ncmVzcyA9ICJQcm9ncmVzcyIsIHJlY29yZGVkX2RhdGUgPSAiUmVjb3JkZWQgRGF0ZSIsIAogICAgICAgICBzdHVkeV9pZCA9ICJSZXNwb25zZSBJRCIsIGFnZSA9ICJZb3VyIGFnZToiLCBnZW5kZXIgPSAiWW91ciBnZW5kZXI6IiwKICAgICAgICAgZW5nX2ZpcnN0X2xhbmcgPSAiSXMgRW5nbGlzaCB5b3VyIGZpcnN0IGxhbmd1YWdlPyIsIHNvdXJjZSA9ICJTb3VyY2UiKSAlPiUKICBzZWxlY3Qoc3R1ZHlfaWQsIGlwLCByZWNvcmRlZF9kYXRlLCBwcm9ncmVzcywgYWdlLCBnZW5kZXIsIGVuZ19maXJzdF9sYW5nLCBzb3VyY2UsIDg6MTQzLCAxNjQ6NTcxKSAlPiUKICBtdXRhdGUoc3R1ZHlfaWQgPSBzdHJfcmVtb3ZlX2FsbChzdHVkeV9pZCwgIlJfIikpICU+JQogIG11dGF0ZV9hbGwodG9sb3dlcikgJT4lCiAgZ3JvdXBfYnkoc3R1ZHlfaWQpICU+JQogIGdhdGhlciguLCAicXVlc3Rpb24iLCAicmVzcG9uc2UiLCAtc3R1ZHlfaWQpICU+JQogIGFycmFuZ2Uoc3R1ZHlfaWQpICU+JQogIGRyb3BfbmEocmVzcG9uc2UpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IHN0cl9yZW1vdmUocXVlc3Rpb24sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRpbWluZyAtIGh0dHBzOlxcL1xcL2tlZWxlcHN5Y2guY28xLnF1YWx0cmljcy5jb21cXC9Db250cm9sUGFuZWxcXC9HcmFwaGljLnBocFxcP0lNPUlNXyIpKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBzdHJfcmVtb3ZlKHF1ZXN0aW9uLCAiLSBUaW1pbmcgLSBGaXJzdCBDbGljayIpKSAlPiUKICBtdXRhdGUocXVlc3Rpb24gPSBzdHJfcmVtb3ZlKHF1ZXN0aW9uLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwczpcXC9cXC9rZWVsZXBzeWNoLmNvMS5xdWFsdHJpY3MuY29tXFwvQ29udHJvbFBhbmVsXFwvR3JhcGhpYy5waHBcXD9JTT1JTV8iKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gc3RyX3JlbW92ZShxdWVzdGlvbiwgIlwgLisiKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gc3RyX3RyaW0ocXVlc3Rpb24pKQoKIyMgIFRlbXBvcmFyaWx5IGV4dHJhY3QgZGVtb2dyYXBoaWNzIGluZm86CmV4cDFfX2RlbW9ncmFwaGljcyA8LSBleHAxX19wYXJ0aWNpcGFudF9pbmZvICU+JQogIGZpbHRlcihxdWVzdGlvbiA9PSAiaXAiIHwgcXVlc3Rpb24gPT0gInJlY29yZGVkX2RhdGUiIHwgcXVlc3Rpb24gPT0gInByb2dyZXNzIiB8CiAgICAgICAgICAgcXVlc3Rpb24gPT0gImFnZSIgfCBxdWVzdGlvbiA9PSAiZ2VuZGVyIiB8IHF1ZXN0aW9uID09ICJlbmdfZmlyc3RfbGFuZyIgfAogICAgICAgICAgIHF1ZXN0aW9uID09ICJzb3VyY2UiKSAlPiUKICBzcHJlYWQocXVlc3Rpb24sIHJlc3BvbnNlKSAlPiUKICAjIyAgVGlkeSBleHAxX19kZW1vZ3JhcGhpY3MgYSBiaXQ6CiAgcmVuYW1lKHN0dWR5X2VuZF90aW1lID0gInJlY29yZGVkX2RhdGUiKSAlPiUKICBtdXRhdGUoc3R1ZHlfZW5kX3RpbWUgPSBzdHJfcmVwbGFjZV9hbGwoc3R1ZHlfZW5kX3RpbWUsICItIiwgIl8iKSkgJT4lCiAgbXV0YXRlKHN0dWR5X2VuZF90aW1lID0gc3RyX3JlcGxhY2VfYWxsKHN0dWR5X2VuZF90aW1lLCAiICIsICJfIikpICU+JQogIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeZiQiLCAiZmVtYWxlIikpICU+JQogIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJ3b21hbiIsICJmZW1hbGUiKSkgJT4lCiAgbXV0YXRlKGdlbmRlciA9IHN0cl9yZXBsYWNlKGdlbmRlciwgIl5tJCIsICJtYWxlIikpICU+JQogIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICI1YTZmNTFlYzQ2ZjAyMzAwMDFjZTQ0NWYiLCAidW5zcGVjaWZpZWQiKSkgJT4lCiAgbXV0YXRlKGdlbmRlciA9IHJlcGxhY2VfbmEoZ2VuZGVyLCAidW5zcGVjaWZpZWQiKSkgJT4lCiAgbXV0YXRlKGFnZSA9IGFzLmRvdWJsZShhZ2UpKSAlPiUKICBtdXRhdGUoYWdlID0gbmFfaWYoYWdlLCAxMDApKQoKIyMgIFRlbXBvcmFyaWx5IGV4dHJhY3Qgc3R1ZHkgZGF0YSAoc28gd2UgY2FuIHJlc2hhcGUgYW5kIHB1dCBSVHMgb24gdGhlIHNhbWUgcm93IGFzIHJlc3BvbnNlcykuCmV4cDFfX3N0dWR5X2RhdGEgPC0gZXhwMV9fcGFydGljaXBhbnRfaW5mbyAlPiUKICBmaWx0ZXIocXVlc3Rpb24gIT0gImlwIiAmIHF1ZXN0aW9uICE9ICJyZWNvcmRlZF9kYXRlIiAmIHF1ZXN0aW9uICE9ICJwcm9ncmVzcyIgJgogICAgICAgICAgIHF1ZXN0aW9uICE9ICJhZ2UiICYgcXVlc3Rpb24gIT0gImdlbmRlciIgJiBxdWVzdGlvbiAhPSAiZW5nX2ZpcnN0X2xhbmciICYKICAgICAgICAgICBxdWVzdGlvbiAhPSAic291cmNlIikgJT4lCiAgbXV0YXRlKHRlbXBfaW5kZXggPSBhcy5kb3VibGUocmVzcG9uc2UpKSAlPiUKICBtdXRhdGUoaW5kZXggPSBpZmVsc2UoaXMubmEodGVtcF9pbmRleCksJ3Jlc3BvbnNlJywncnQnKSkgJT4lCiAgc2VsZWN0KC10ZW1wX2luZGV4KSAlPiUKICBhcy5kYXRhLmZyYW1lKCkKZXhwMV9fc3R1ZHlfZGF0YSA8LSByZXNoYXBlKGV4cDFfX3N0dWR5X2RhdGEsIGlkdmFyPWMoJ3N0dWR5X2lkJywncXVlc3Rpb24nKSwgdGltZXZhcj0naW5kZXgnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uPSJ3aWRlIikgJT4lCiAgYXNfdGliYmxlKGV4cDFfX3N0dWR5X2RhdGEsIC5uYW1lX3JlcGFpcikgJT4lCiAgcmVuYW1lKHN0dWR5X3J0ID0gInJlc3BvbnNlLnJ0Iiwgc3R1ZHlfcmVzcG9uc2UgPSAicmVzcG9uc2UucmVzcG9uc2UiKSAlPiUKICBncm91cF9ieShzdHVkeV9pZCkgJT4lCiAgIyMgIFdlIGFsc28gZG8gc3R1ZHkgY2FsY3VsYXRpb25zIGhlcmUsIGFzIGl0J3MgZWFzaWVyIHdoZW4gc2VwYXJhdGVkIGZyb20gZXhwMV9fZGVtb2dyYXBoaWNzLgogICMjICBGaXJzdCB3ZSBtZXJnZSB3aXRoICdleHAxX19pbWFnZV91cmxzJyB0byBnZXQgcHJvcGVyIGl0ZW0gbmFtZXM6CiAgbWVyZ2UoLiwgZXhwMV9faW1hZ2VfdXJscywgYnkueD0icXVlc3Rpb24iLCBieS55PSJ1cmwiKSAlPiUKICBncm91cF9ieShzdHVkeV9pZCkgJT4lCiAgc2VsZWN0KC1xdWVzdGlvbikgJT4lCiAgYXJyYW5nZShzdHVkeV9pZCwgc3R1ZHlfbGlzdCwgc3RpbSkgJT4lCiAgZmlsdGVyKCFzdHJfZGV0ZWN0KHN0dWR5X2xpc3QsICdGSUxMRVInKSkgJT4lCiAgIyMgIFNwbGl0IHRoZSAnc3RpbScgY29sdW1uIHVwLCBzbyBpdGVtIG5hbWUgYW5kIHN0aW11bGkgZm9ybWF0IGFyZSBzZXBlcmF0ZToKICBzZXBhcmF0ZShzdGltLCBjKCJpdGVtX25hbWUiLCAic3RpbV9mb3JtYXQiKSkgJT4lCiAgIyMgIENsZWFybHkgc2hvdyB3aGljaCBsaXN0cyB3ZXJlIHN0dWRpZWQgYXMgd29yZHMgYW5kIHBpY3M6IAogIG11dGF0ZShzdHVkaWVkX3dvcmRzID0gaWZlbHNlKHN0aW1fZm9ybWF0ID09ICJ3b3JkIiwgc3R1ZHlfbGlzdCwgTkEpKSAlPiUKICBtdXRhdGUoc3R1ZGllZF9waWNzID0gaWZlbHNlKHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiwgc3R1ZHlfbGlzdCwgTkEpKSAlPiUKICBzZWxlY3QoLXN0dWR5X2xpc3QpICU+JQogICMjICBDb3VudCB0b3RhbCBzdHVkeSByZXNwb25zZXMgKHNob3VsZCBiZSA2MCk6CiAgYWRkX3RhbGx5KHN0aW1fZm9ybWF0ID09ICJ3b3JkIiB8IHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInN0dWR5X3RvdGFsX3Jlc3AiKSAlPiUKICAjIyAgQ291bnQgdG90YWwgc3R1ZHkgcmVzcG9uc2VzIGJ5IHN0aW0tZm9ybWF0IChzaG91bGQgYmUgMzAgZWFjaCk6CiAgYWRkX3RhbGx5KHN0aW1fZm9ybWF0ID09ICJ3b3JkIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInN0dWR5X3RvdGFsX3dvcmRfcmVzcCIpICU+JQogIGFkZF90YWxseShzdGltX2Zvcm1hdCA9PSAicGljdHVyZSIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJzdHVkeV90b3RhbF9waWNfcmVzcCIpICU+JQogICMjICBDb3VudCB0b3RhbCAqY29ycmVjdCogd29yZCByZXNwb25zZXMgKHNob3VsZCBiZSAzMCk6CiAgYWRkX3RhbGx5KHN0aW1fZm9ybWF0ID09ICJ3b3JkIiAmIHN0dWR5X3Jlc3BvbnNlID09ICJ3b3JkIiwgc29ydCA9IEZBTFNFLCAKICAgICAgICAgICAgbmFtZSA9ICJzdHVkeV9jb3JyZWN0X3RvdGFsX3dvcmRfcmVzcCIpICU+JQogICMjICBDb3VudCB0b3RhbCAqY29ycmVjdCogcGljIHJlc3BvbnNlcyAoc2hvdWxkIGJlIDMwKToKICBhZGRfdGFsbHkoc3RpbV9mb3JtYXQgPT0gInBpY3R1cmUiICYgc3R1ZHlfcmVzcG9uc2UgPT0gInBpY3R1cmUiLCBzb3J0ID0gRkFMU0UsIAogICAgICAgICAgICBuYW1lID0gInN0dWR5X2NvcnJlY3RfdG90YWxfcGljX3Jlc3AiKSAlPiUKICAjIyAgQ291bnQgdG90YWwgKmNvcnJlY3QqIHJlc3BvbnNlcyAoc2hvdWxkIGJlIDYwKToKICBtdXRhdGUoc3R1ZHlfY29ycmVjdF90b3RhbF9yZXNwID0gc3R1ZHlfY29ycmVjdF90b3RhbF93b3JkX3Jlc3AgKyBzdHVkeV9jb3JyZWN0X3RvdGFsX3BpY19yZXNwKSAlPiUKICAjIyAgQ2FsY3VsYXRlIG1lYW4gb3ZlcmFsbCByZWFjdGlvbiB0aW1lOgogIG11dGF0ZShzdHVkeV9ydCA9IGFzLmRvdWJsZShzdHVkeV9ydCkpICU+JQogIG11dGF0ZShtZWFuX3N0dWR5X3J0X3RvdGFsID0gbWVhbihzdHVkeV9ydCkpICU+JQogICMjICBDYWxjdWxhdGUgbWVhbiB3b3JkIHJlYWN0aW9uIHRpbWUgKGNvcnJlY3QgcmVzcG9uc2VzKToKICBtdXRhdGUobWVhbl9zdHVkeV9ydF9jb3JyX3dvcmQgPSBtZWFuKHN0dWR5X3J0W3N0aW1fZm9ybWF0ID09ICJ3b3JkIiAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHVkeV9yZXNwb25zZSA9PSAid29yZCJdKSkgJT4lCiAgIyMgIENhbGN1bGF0ZSBtZWFuIHBpYyByZWFjdGlvbiB0aW1lIChjb3JyZWN0IHJlc3BvbnNlcyk6CiAgbXV0YXRlKG1lYW5fc3R1ZHlfcnRfY29ycl9waWMgPSBtZWFuKHN0dWR5X3J0W3N0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0dWR5X3Jlc3BvbnNlID09ICJwaWN0dXJlIl0pKSAlPiUKICAjIyAgUmVtb3ZlIGNvbHVtbnMgd2l0aCBtdWx0aXBsZSB1bmlxdWUgdmFsdWVzIG5vdyB3ZSd2ZSBkb25lIHRoZSB0b3RhbHM6CiAgc2VsZWN0KC1zdHVkeV9ydCwgLXN0dWR5X3Jlc3BvbnNlLCAtaXRlbV9uYW1lLCAtc3RpbV9mb3JtYXQpICU+JQogICMjICBSZWR1Y2UgZGF0YSBzbyB3ZSBoYXZlIG9uZSByb3cgcGVyIHBhcnRpY2lwYW50OgogIHN1bW1hcmlzZV9hbGwoY29hbGVzY2VfYnlfY29sdW1uKQojIyAgICBPdmVyd3JpdGUgJ2V4cDFfX3BhcnRpY2lwYW50X2luZm8nIHdpdGggJ2V4cDFfX3N0dWR5X2RhdGEnIGpvaW5lZCB3aXRoICdleHAxX19kZW1vZ3JhcGhpY3MnOgpleHAxX19wYXJ0aWNpcGFudF9pbmZvIDwtIHJpZ2h0X2pvaW4oZXhwMV9fZGVtb2dyYXBoaWNzLCBleHAxX19zdHVkeV9kYXRhLCBieSA9ICJzdHVkeV9pZCIpICU+JQogICMjICAgIFJlbW92ZSBwYXJ0aWNpcGFudHMgdGhhdCBoYXZlIG5vIHN0dWR5IHRvdGFsIChpZSwgZGlkIGV4cDFfX2RlbW9ncmFwaGljcyBidXQgZGlkIG5vdCBzdGFydCBzdHVkeSk6CiAgZHJvcF9uYSgic3R1ZHlfdG90YWxfcmVzcCIpICU+JQogIG11dGF0ZV9hbGwodG9sb3dlcikKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgSW1wb3J0IGFuZCB0aWR5IHRlc3QgZGF0YTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIEltcG9ydCB0ZXN0IGRhdGEgZmlsZXMgKG91dHB1dCBmcm9tIFF1YWx0cmljcyB3YXMgdG9vIGJpZyBhbmQgd291bGQgZmFpbCwgc28gaGFzIHRvIGJlIGluIDIgcGFydHMhKS4KIyMgICAgV2UgaGF2ZSB0byBkbyBzb21lIHF1aWNrIHRpZHlpbmcgdG8gZWFjaCBiZWZvcmUgam9pbmluZyAoY29sbmFtZXMgYXJlIHRoZSBzYW1lIHJpZ2h0IG5vdyAoZS5nLiBRMS4xKSwKIyMgICAgYnV0IGFyZSBkaWZmZXJlbnQgYWZ0ZXIgd2UgdXNlIHJvd190b19uYW1lcy4KZXhwMV9fZnVsbF9kYXRhMSA8LSByZWFkX2NzdigiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8xL2V4cGVyaW1lbnRfMV9kYXRhL0FDX1BfTWFyY2ggMTksIDIwMjBfMDYuMzAuY3N2IikgJT4lCiAgc2VsZWN0KC0iRW5kRGF0ZSIsIC0iU3RhdHVzIiwgLSJEdXJhdGlvbiAoaW4gc2Vjb25kcykiLCAtIkZpbmlzaGVkIiwgLSJSZWNpcGllbnRMYXN0TmFtZSIsIAogICAgICAgICAtIlJlY2lwaWVudEZpcnN0TmFtZSIsIC0iUmVjaXBpZW50RW1haWwiLCAtIkV4dGVybmFsUmVmZXJlbmNlIiwgLSJMb2NhdGlvbkxhdGl0dWRlIiwKICAgICAgICAgLSJMb2NhdGlvbkxvbmdpdHVkZSIsIC0iRGlzdHJpYnV0aW9uQ2hhbm5lbCIsIC0iVXNlckxhbmd1YWdlIiwgLWNvbnRhaW5zKCJMYXN0IENsaWNrIiksCiAgICAgICAgIC1jb250YWlucygiUGFnZSBTdWJtaXQiKSwgLWNvbnRhaW5zKCJDbGljayBDb3VudCIpLCAtY29udGFpbnMoIlEzLjgiKSwgLWNvbnRhaW5zKCJRNC44IiksCiAgICAgICAgIC1jb250YWlucygiUTUuOCIpLCAtY29udGFpbnMoIlE2LjgiKSwgLWNvbnRhaW5zKCJRNy44IiksIC1jb250YWlucygiUTguOCIpLCAKICAgICAgICAgLWNvbnRhaW5zKCJRMTEuOSIpLCAtY29udGFpbnMoIlExMi45IikpICU+JQogICMjICAgIE1lcmdlIGp1c3RpZmljYXRpb24gY29sdW1ucyBmcm9tIGFjcm9zcyB0aGUgdGhyZWUgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbnM6CiAgdW5pdGUoInJlY19qdXN0aWZpY2F0aW9uIiwgIlE1LjJfMSIsICJROS4yXzEiLCAiUTEzLjJfMSIsIG5hLnJtID0gVFJVRSwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgdW5pdGUoImZhbV9qdXN0aWZpY2F0aW9uIiwgIlE1LjJfMiIsICJROS4yXzIiLCAiUTEzLjJfMiIsIG5hLnJtID0gVFJVRSwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgdW5pdGUoImJvdGhfanVzdGlmaWNhdGlvbiIsICJROS4yXzMiLCAiUTEzLjJfMyIsIG5hLnJtID0gVFJVRSwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgdW5pdGUoImd1ZXNzX2p1c3RpZmljYXRpb24iLCAiUTUuMl8zIiwgIlE5LjJfNCIsICJRMTMuMl80IiwgbmEucm0gPSBUUlVFLCByZW1vdmUgPSBUUlVFKQojIyAgICBBZGQgY29sdW1uIGlkZW50aWZpZXJzIHRvIHRoZSBsb3dlciByb3dzIChzaW5jZSB3ZSBzdGlsbCBoYXZlIHRoZSBRdWFsdHJpY3MgM3ggaGVhZGVyIHJvd3MgaGVyZSk6CmV4cDFfX2Z1bGxfZGF0YTEkcmVjX2p1c3RpZmljYXRpb25bMToyXSA8LSAicmVjX2p1c3RpZmljYXRpb24iCmV4cDFfX2Z1bGxfZGF0YTEkZmFtX2p1c3RpZmljYXRpb25bMToyXSA8LSAiZmFtX2p1c3RpZmljYXRpb24iCmV4cDFfX2Z1bGxfZGF0YTEkYm90aF9qdXN0aWZpY2F0aW9uWzE6Ml0gPC0gImJvdGhfanVzdGlmaWNhdGlvbiIKZXhwMV9fZnVsbF9kYXRhMSRndWVzc19qdXN0aWZpY2F0aW9uWzE6Ml0gPC0gImd1ZXNzX2p1c3RpZmljYXRpb24iCiMjICAgIFNldCBjb3JyZWN0IHJvdyBmb3Igcm93bmFtZXMgKFF1YWx0cmljcyBvdXRwdXRzIHdpdGggMyBoZWFkZXIgcm93cyAtIHdlIG9ubHkgd2FudCBvbmUpOiAKZXhwMV9fZnVsbF9kYXRhMSA8LSBleHAxX19mdWxsX2RhdGExICU+JSByb3dfdG9fbmFtZXMocm93X251bWJlciA9IDEpICU+JSBjbGVhbl9uYW1lcygpICU+JSBzbGljZSgtMSkgJT4lCiAgIyMgICAgUmVuYW1lIHNvbWUgY29sdW1uczogICAgICAgCiAgcmVuYW1lKGlwID0gImlwX2FkZHJlc3MiLCB0ZXN0X2lkID0gInJlc3BvbnNlX2lkIiwgCiAgICAgICAgIGNvbW1lbnRzID0gImlmX3lvdV9oYXZlX2FueV9jb21tZW50c19hYm91dF90aGlzX2V4cGVyaW1lbnRfcGxlYXNlX2luY2x1ZGVfdGhlbV9iZWxvdyIpICU+JQogICMjICAgIFJlb3JkZXIgY29sdW1uczogICAgCiAgc2VsZWN0KHRlc3RfaWQsIGlwLCBzdGFydF9kYXRlLCByZWNfanVzdGlmaWNhdGlvbiwgZmFtX2p1c3RpZmljYXRpb24sIAogICAgICAgICBib3RoX2p1c3RpZmljYXRpb24sIGd1ZXNzX2p1c3RpZmljYXRpb24sIGNvbW1lbnRzLCA1OjUxNiwgNTIwOjEwMzEsIDEwMzM6MTY3MikgJT4lCiAgIyMgICAgU2V0IElEIGFzIHRoZSBncm91cGluZyB2YXJpYWJsZToKICBtdXRhdGUodGVzdF9pZCA9IHN0cl9yZW1vdmVfYWxsKHRlc3RfaWQsICJSXyIpKSAlPiUKICBtdXRhdGVfYWxsKHRvbG93ZXIpICU+JQogIGdyb3VwX2J5KHRlc3RfaWQpICU+JQogICMjICAgIFJlZm9ybWF0IGZyb20gbG9uZyB0byB3aWRlOgogIGdhdGhlciguLCAicXVlc3Rpb24iLCAicmVzcG9uc2UiLCAtdGVzdF9pZCkgJT4lCiAgYXJyYW5nZSh0ZXN0X2lkKQoKZXhwMV9fZnVsbF9kYXRhMiA8LSByZWFkX2NzdigiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8xL2V4cGVyaW1lbnRfMV9kYXRhL0JEX1BfTWFyY2ggMTksIDIwMjBfMDYuMjkuY3N2IikgJT4lCiAgc2VsZWN0KC0iRW5kRGF0ZSIsIC0iU3RhdHVzIiwgLSJEdXJhdGlvbiAoaW4gc2Vjb25kcykiLCAtIkZpbmlzaGVkIiwgLSJSZWNpcGllbnRMYXN0TmFtZSIsIAogICAgICAgICAtIlJlY2lwaWVudEZpcnN0TmFtZSIsIC0iUmVjaXBpZW50RW1haWwiLCAtIkV4dGVybmFsUmVmZXJlbmNlIiwgLSJMb2NhdGlvbkxhdGl0dWRlIiwKICAgICAgICAgLSJMb2NhdGlvbkxvbmdpdHVkZSIsIC0iRGlzdHJpYnV0aW9uQ2hhbm5lbCIsIC0iVXNlckxhbmd1YWdlIiwgLWNvbnRhaW5zKCJMYXN0IENsaWNrIiksCiAgICAgICAgIC1jb250YWlucygiUGFnZSBTdWJtaXQiKSwgLWNvbnRhaW5zKCJDbGljayBDb3VudCIpLCAtY29udGFpbnMoIlEzLjgiKSwgLWNvbnRhaW5zKCJRNC44IiksCiAgICAgICAgIC1jb250YWlucygiUTUuOCIpLCAtY29udGFpbnMoIlE2LjgiKSwgLWNvbnRhaW5zKCJRNy44IiksIC1jb250YWlucygiUTguOCIpLCAKICAgICAgICAgLWNvbnRhaW5zKCJRMTEuOSIpLCAtY29udGFpbnMoIlExMi45IikpICU+JQogICMjICAgIE1lcmdlIGp1c3RpZmljYXRpb24gY29sdW1ucyBmcm9tIGFjcm9zcyB0aGUgdGhyZWUgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbnM6CiAgdW5pdGUoInJlY19qdXN0aWZpY2F0aW9uIiwgIlE1LjJfMSIsICJROS4yXzEiLCAiUTEzLjJfMSIsIG5hLnJtID0gVFJVRSwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgdW5pdGUoImZhbV9qdXN0aWZpY2F0aW9uIiwgIlE1LjJfMiIsICJROS4yXzIiLCAiUTEzLjJfMiIsIG5hLnJtID0gVFJVRSwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgdW5pdGUoImJvdGhfanVzdGlmaWNhdGlvbiIsICJROS4yXzMiLCAiUTEzLjJfMyIsIG5hLnJtID0gVFJVRSwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgdW5pdGUoImd1ZXNzX2p1c3RpZmljYXRpb24iLCAiUTUuMl8zIiwgIlE5LjJfNCIsICJRMTMuMl80IiwgbmEucm0gPSBUUlVFLCByZW1vdmUgPSBUUlVFKQojIyAgICBBZGQgY29sdW1uIGlkZW50aWZpZXJzIHRvIHRoZSBsb3dlciByb3dzIChzaW5jZSB3ZSBzdGlsbCBoYXZlIHRoZSBRdWFsdHJpY3MgM3ggaGVhZGVyIHJvd3MgaGVyZSk6CmV4cDFfX2Z1bGxfZGF0YTIkcmVjX2p1c3RpZmljYXRpb25bMToyXSA8LSAicmVjX2p1c3RpZmljYXRpb24iCmV4cDFfX2Z1bGxfZGF0YTIkZmFtX2p1c3RpZmljYXRpb25bMToyXSA8LSAiZmFtX2p1c3RpZmljYXRpb24iCmV4cDFfX2Z1bGxfZGF0YTIkYm90aF9qdXN0aWZpY2F0aW9uWzE6Ml0gPC0gImJvdGhfanVzdGlmaWNhdGlvbiIKZXhwMV9fZnVsbF9kYXRhMiRndWVzc19qdXN0aWZpY2F0aW9uWzE6Ml0gPC0gImd1ZXNzX2p1c3RpZmljYXRpb24iCiMjICAgIFNldCBjb3JyZWN0IHJvdyBmb3Igcm93bmFtZXMgKFF1YWx0cmljcyBvdXRwdXRzIHdpdGggMyBoZWFkZXIgcm93cyAtIHdlIG9ubHkgd2FudCBvbmUpOiAKZXhwMV9fZnVsbF9kYXRhMiA8LSBleHAxX19mdWxsX2RhdGEyICU+JSByb3dfdG9fbmFtZXMocm93X251bWJlciA9IDEpICU+JSBjbGVhbl9uYW1lcygpICU+JSBzbGljZSgtMSkgJT4lCiAgIyMgICAgUmVuYW1lIHNvbWUgY29sdW1uczogICAgICAgCiAgcmVuYW1lKGlwID0gImlwX2FkZHJlc3MiLCB0ZXN0X2lkID0gInJlc3BvbnNlX2lkIiwKICAgICAgICAgY29tbWVudHMgPSAiaWZfeW91X2hhdmVfYW55X2NvbW1lbnRzX2Fib3V0X3RoaXNfZXhwZXJpbWVudF9wbGVhc2VfaW5jbHVkZV90aGVtX2JlbG93IikgJT4lCiAgIyMgICAgUmVvcmRlciBjb2x1bW5zOiAgICAKICBzZWxlY3QodGVzdF9pZCwgaXAsIHN0YXJ0X2RhdGUsIHJlY19qdXN0aWZpY2F0aW9uLCBmYW1fanVzdGlmaWNhdGlvbiwgCiAgICAgICAgIGJvdGhfanVzdGlmaWNhdGlvbiwgZ3Vlc3NfanVzdGlmaWNhdGlvbiwgY29tbWVudHMsIDU6NTE2LCA1MjA6MTAzMSwgMTAzMzoxNjcyKSAlPiUKICAjIyAgICBTZXQgSUQgYXMgdGhlIGdyb3VwaW5nIHZhcmlhYmxlOgogIG11dGF0ZSh0ZXN0X2lkID0gc3RyX3JlbW92ZV9hbGwodGVzdF9pZCwgIlJfIikpICU+JQogIG11dGF0ZV9hbGwodG9sb3dlcikgJT4lCiAgZ3JvdXBfYnkodGVzdF9pZCkgJT4lCiAgIyMgICAgUmVmb3JtYXQgZnJvbSBsb25nIHRvIHdpZGU6CiAgZ2F0aGVyKC4sICJxdWVzdGlvbiIsICJyZXNwb25zZSIsIC10ZXN0X2lkKSAlPiUKICBhcnJhbmdlKHRlc3RfaWQpCgpleHAxX19mdWxsX2RhdGEgPC0gZXhwMV9fZnVsbF9kYXRhMSAlPiUKICBiaW5kX3Jvd3MoZXhwMV9fZnVsbF9kYXRhMikgJT4lCiAgZHJvcF9uYShyZXNwb25zZSkKCiMjICAgIFRlbXBvcmFyaWx5IGV4dHJhY3QganVzdGlmaWNhdGlvbnM6CmV4cDFfX2p1c3RpZmljYXRpb25zIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICBmaWx0ZXIocXVlc3Rpb24gPT0gImlwIiB8IHF1ZXN0aW9uID09ICJzdGFydF9kYXRlIiB8IHF1ZXN0aW9uID09ICJwcm9ncmVzcyIgfAogICAgICAgICAgIHF1ZXN0aW9uID09ICJyZWNfanVzdGlmaWNhdGlvbiIgfCBxdWVzdGlvbiA9PSAiZmFtX2p1c3RpZmljYXRpb24iIHwKICAgICAgICAgICBxdWVzdGlvbiA9PSAiYm90aF9qdXN0aWZpY2F0aW9uIiB8IHF1ZXN0aW9uID09ICJndWVzc19qdXN0aWZpY2F0aW9uIiB8CiAgICAgICAgICAgcXVlc3Rpb24gPT0gImNvbW1lbnRzIikgJT4lCiAgc3ByZWFkKHF1ZXN0aW9uLCByZXNwb25zZSkKCiMjICAgIFRpZHkgdGVzdCBkYXRhOgpleHAxX19mdWxsX2RhdGEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIGZpbHRlcihxdWVzdGlvbiAhPSAiaXAiICYgcXVlc3Rpb24gIT0gInN0YXJ0X2RhdGUiICYgcXVlc3Rpb24gIT0gInByb2dyZXNzIiAmCiAgICAgICAgICAgcXVlc3Rpb24gIT0gInJlY19qdXN0aWZpY2F0aW9uIiAmIHF1ZXN0aW9uICE9ICJmYW1fanVzdGlmaWNhdGlvbiIgJgogICAgICAgICAgIHF1ZXN0aW9uICE9ICJib3RoX2p1c3RpZmljYXRpb24iICYgcXVlc3Rpb24gIT0gImd1ZXNzX2p1c3RpZmljYXRpb24iICYgCiAgICAgICAgICAgcXVlc3Rpb24gIT0gImNvbW1lbnRzIikgJT4lCiAgbXV0YXRlKHJmcl9yZXNwX3R5cGUgPSBxdWVzdGlvbikgJT4lCiAgbXV0YXRlKHJmcl9yZXNwX3R5cGUgPSBzdHJfcmVtb3ZlKHJmcl9yZXNwX3R5cGUsICIuKl8iKSkgJT4lCiAgbXV0YXRlKHJmcl9yZXNwX3R5cGUgPSBpZmVsc2UocmZyX3Jlc3BfdHlwZSA9PSAicmVjb2xsZWN0aW9uIiB8IHJmcl9yZXNwX3R5cGUgPT0gImZhbWlsaWFyaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZnJfcmVzcF90eXBlLCAiIikpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IHN0cl9yZW1vdmUocXVlc3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGltaW5nX2h0dHBzX2tlZWxlcHN5Y2hfY28xX3F1YWx0cmljc19jb21fY29udHJvbF9wYW5lbF9ncmFwaGljX3BocF9pbV9pbV8iKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gc3RyX3JlbW92ZShxdWVzdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwc19rZWVsZXBzeWNoX2NvMV9xdWFsdHJpY3NfY29tX2NvbnRyb2xfcGFuZWxfZ3JhcGhpY19waHBfaW1faW1fIikpICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IHN0cl9yZW1vdmVfYWxsKHF1ZXN0aW9uLCAiXyIpKSAlPiUKICBtdXRhdGUocXVlc3Rpb25fbnVtYmVyID0gcXVlc3Rpb24pICU+JQogIG11dGF0ZShxdWVzdGlvbiA9IHN0cl9yZW1vdmUocXVlc3Rpb24sICIoPzw9LnsxNX0pLisiKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX251bWJlciA9IHN0cl9yZW1vdmUocXVlc3Rpb25fbnVtYmVyLCAiXi57MCwxNX0iKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uID0gc3RyX3RyaW0ocXVlc3Rpb24pKSAlPiUKICBtdXRhdGUocmVzcF9vcHRpb24gPSBjYXNlX3doZW4oc3RyX2RldGVjdChxdWVzdGlvbl9udW1iZXIsICJxMyIpIH4gInJmZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QocXVlc3Rpb25fbnVtYmVyLCAicTQiKSB+ICJyZmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJfZGV0ZWN0KHF1ZXN0aW9uX251bWJlciwgInE3IikgfiAicmZiZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cl9kZXRlY3QocXVlc3Rpb25fbnVtYmVyLCAicTgiKSB+ICJyZmJnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChxdWVzdGlvbl9udW1iZXIsICJxMTEiKSB+ICJyZl9yYXRpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChxdWVzdGlvbl9udW1iZXIsICJxMTIiKSB+ICJyZl9yYXRpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChxdWVzdGlvbl9udW1iZXIsICJyZWNvbGxlY3Rpb24iKSB+ICJyZl9yYXRpbmdzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyX2RldGVjdChxdWVzdGlvbl9udW1iZXIsICJmYW1pbGlhcml0eSIpIH4gInJmX3JhdGluZ3MiKSkgJT4lCiAgZmlsbChyZXNwX29wdGlvbiwgLmRpcmVjdGlvbiA9ICJ1cGRvd24iKSAlPiUKICAjIyAgICBSZXNoYXBlIHRvIHB1dCBSVHMgb24gdGhlIHNhbWUgcm93IGFzIHJlc3BvbnNlcyk6CiAgbXV0YXRlKHRlbXBfaW5kZXggPSBhcy5kb3VibGUocmVzcG9uc2UpKSAlPiUKICBtdXRhdGUoaW5kZXggPSBpZmVsc2UoKGlzLm5hKHRlbXBfaW5kZXgpICYgcmVzcF9vcHRpb24gPT0gInJmZyIpICYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlID09ICJvbGQiIHwgcmVzcG9uc2UgPT0gIm5ldyIpLCAncmZnX29sZF9uZXcnLCdydCcpKSAlPiUKICBtdXRhdGUoaW5kZXggPSBpZmVsc2UoKGlzLm5hKHRlbXBfaW5kZXgpICYgcmVzcF9vcHRpb24gPT0gInJmYmciKSAmIAogICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSA9PSAib2xkIiB8IHJlc3BvbnNlID09ICJuZXciKSwgJ3JmYmdfb2xkX25ldycsIGluZGV4KSkgJT4lCiAgbXV0YXRlKGluZGV4ID0gaWZlbHNlKChpcy5uYSh0ZW1wX2luZGV4KSAmIHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIikgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UgPT0gIm9sZCIgfCByZXNwb25zZSA9PSAibmV3IiksICdyZl9yYXRpbmdzX29sZF9uZXcnLCBpbmRleCkpICU+JQogIG11dGF0ZShpbmRleCA9IGlmZWxzZSgoaXMubmEodGVtcF9pbmRleCkgJiByZXNwX29wdGlvbiA9PSAicmZnIikgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICAocmVzcG9uc2UgIT0gIm9sZCIgJiByZXNwb25zZSAhPSAibmV3IiksICdyZmcnLCBpbmRleCkpICU+JQogIG11dGF0ZShpbmRleCA9IGlmZWxzZSgoaXMubmEodGVtcF9pbmRleCkgJiByZXNwX29wdGlvbiA9PSAicmZiZyIpICYgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlc3BvbnNlICE9ICJvbGQiICYgcmVzcG9uc2UgIT0gIm5ldyIpLCAncmZiZycsIGluZGV4KSkgJT4lCiAgbXV0YXRlKGluZGV4ID0gaWZlbHNlKChpcy5uYSh0ZW1wX2luZGV4KSAmIAogICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwX29wdGlvbiA9PSAicmZfcmF0aW5ncyIgJiByZnJfcmVzcF90eXBlID09ICJyZWNvbGxlY3Rpb24iKSAmIAogICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSAhPSAib2xkIiAmIHJlc3BvbnNlICE9ICJuZXciKSwgJ3JlY19yYXRpbmcnLCBpbmRleCkpICU+JQogIG11dGF0ZShpbmRleCA9IGlmZWxzZSgoaXMubmEodGVtcF9pbmRleCkgJiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcF9vcHRpb24gPT0gInJmX3JhdGluZ3MiICYgcmZyX3Jlc3BfdHlwZSA9PSAiZmFtaWxpYXJpdHkiKSAmIAogICAgICAgICAgICAgICAgICAgICAgICAgIChyZXNwb25zZSAhPSAib2xkIiAmIHJlc3BvbnNlICE9ICJuZXciKSwgJ2ZhbV9yYXRpbmcnLCBpbmRleCkpICU+JQogIHNlbGVjdCgtcmZyX3Jlc3BfdHlwZSwgLXRlbXBfaW5kZXgsIC1xdWVzdGlvbl9udW1iZXIpICU+JQogIGFzLmRhdGEuZnJhbWUoKQoKZXhwMV9fZnVsbF9kYXRhIDwtIHJlc2hhcGUoZXhwMV9fZnVsbF9kYXRhLCBpZHZhcj1jKCd0ZXN0X2lkJywncXVlc3Rpb24nKSwgdGltZXZhcj0naW5kZXgnLCBkaXJlY3Rpb249IndpZGUiKSAlPiUKICBhc190aWJibGUoZXhwMV9fc3R1ZHlfZGF0YSwgLm5hbWVfcmVwYWlyKSAlPiUKICB1bml0ZSgib2xkX25ldyIsIHJlc3BvbnNlLnJmZ19vbGRfbmV3LCByZXNwb25zZS5yZmJnX29sZF9uZXcsIAogICAgICAgIHJlc3BvbnNlLnJmX3JhdGluZ3Nfb2xkX25ldywgcmVtb3ZlID0gVFJVRSwgbmEucm0gPSBUUlVFKSAlPiUKICBzZWxlY3QoLXJlc3Bfb3B0aW9uLnJmZ19vbGRfbmV3LCAtcmVzcF9vcHRpb24ucmZnLCAtcmVzcF9vcHRpb24ucmZfcmF0aW5nc19vbGRfbmV3LCAKICAgICAgICAgLXJlc3Bfb3B0aW9uLnJlY19yYXRpbmcsIC1yZXNwX29wdGlvbi5mYW1fcmF0aW5nLCAtcmVzcF9vcHRpb24ucmZiZ19vbGRfbmV3LCAKICAgICAgICAgLXJlc3Bfb3B0aW9uLnJmYmcpICU+JQogICMjICAgIFJlY29kZSBSRi1SYXRpbmdzIHJlc3BvbnNlcyB0byBiZXR0ZXIgc2hvdyByZWMvZmFtOgogIG11dGF0ZShyZXNwb25zZS5yZWNfcmF0aW5nID0gc3RyX3JlbW92ZV9hbGwocmVzcG9uc2UucmVjX3JhdGluZywgIiAiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlLnJlY19yYXRpbmcgPSBzdHJfcmVtb3ZlX2FsbChyZXNwb25zZS5yZWNfcmF0aW5nLCAiKD88PS57MX0pLisiKSkgJT4lCiAgbXV0YXRlKHJlc3BvbnNlLnJlY19yYXRpbmcgPSBzdHJfYygicmVjXyIsIHJlc3BvbnNlLnJlY19yYXRpbmcpKSAlPiUKICBtdXRhdGUocmVzcG9uc2UuZmFtX3JhdGluZyA9IHN0cl9yZW1vdmVfYWxsKHJlc3BvbnNlLmZhbV9yYXRpbmcsICIgIikpICU+JQogIG11dGF0ZShyZXNwb25zZS5mYW1fcmF0aW5nID0gc3RyX3JlbW92ZV9hbGwocmVzcG9uc2UuZmFtX3JhdGluZywgIig/PD0uezF9KS4rIikpICU+JQogIG11dGF0ZShyZXNwb25zZS5mYW1fcmF0aW5nID0gc3RyX2MoImZhbV8iLCByZXNwb25zZS5mYW1fcmF0aW5nKSkgJT4lCiAgIyMgICAgVW5pdGUgY29sdW1ucyBvZiB0aGUgc2FtZSByZXNwb25zZSB0eXBlOgogIHVuaXRlKCJyZWNmYW1fMSIsIHJlc3BvbnNlLnJmZywgcmVzcG9uc2UucmZiZywgcmVzcG9uc2UucmVjX3JhdGluZywgcmVtb3ZlID0gVFJVRSwgbmEucm0gPSBUUlVFKSAlPiUKICBtdXRhdGUocmVjZmFtXzEgPSBuYV9pZihyZWNmYW1fMSwgIiIpKSAlPiUKICByZW5hbWUocmVjZmFtXzIgPSAicmVzcG9uc2UuZmFtX3JhdGluZyIpCiMjICAgIE1lcmdlIHdpdGggJ2V4cDFfX2ltYWdlX3VybHMnIHRvIGdldCBwcm9wZXIgaXRlbSBuYW1lczoKZXhwMV9faW1hZ2VfdXJscyA8LSBleHAxX19pbWFnZV91cmxzICU+JQogIG11dGF0ZV9hbGwodG9sb3dlcikKZXhwMV9fZnVsbF9kYXRhIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICBtZXJnZSguLCBleHAxX19pbWFnZV91cmxzLCBieS54PSJxdWVzdGlvbiIsIGJ5Lnk9InVybCIpICU+JQogIGdyb3VwX2J5KHRlc3RfaWQpICU+JQogIHNlbGVjdCgtcXVlc3Rpb24pICU+JQogIGFycmFuZ2UodGVzdF9pZCwgc3R1ZHlfbGlzdCwgc3RpbSkgJT4lCiAgcmVuYW1lKG9sZF9uZXdfcnQgPSAicmVzcG9uc2UucnQiLCByZXNwX29wdGlvbiA9ICJyZXNwX29wdGlvbi5ydCIsIAogICAgICAgICBiZWxvbmdfdG9fc3R1ZHlfbGlzdCA9ICJzdHVkeV9saXN0IikgJT4lCiAgIyMgICAgUmVtb3ZlIGZpbGxlciBpdGVtczoKICBmaWx0ZXIoIXN0cl9kZXRlY3QoYmVsb25nX3RvX3N0dWR5X2xpc3QsICdmaWxsZXInKSkgJT4lCiAgIyMgICAgU3BsaXQgdGhlICdzdGltJyBjb2x1bW4gdXAsIHNvIGl0ZW0gbmFtZSBhbmQgc3RpbXVsaSBmb3JtYXQgYXJlIHNlcGVyYXRlOgogIHNlcGFyYXRlKHN0aW0sIGMoIml0ZW1fbmFtZSIsICJzdGltX2Zvcm1hdCIpKSAlPiUKICAjIyAgICBDb3VudCB0b3RhbCB0ZXN0IHJlc3BvbnNlcyAoc2hvdWxkIGJlIDEyMCk6CiAgYWRkX3RhbGx5KHN0aW1fZm9ybWF0ID09ICJ3b3JkIiB8IHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInRlc3RfdG90YWxfcmVzcCIpICU+JQogICMjICAgIENvdW50IHRvdGFsIHRlc3QgcmVzcG9uc2VzIGJ5IHN0aW0tZm9ybWF0IChzaG91bGQgYmUgNjAgZWFjaCk6CiAgYWRkX3RhbGx5KHN0aW1fZm9ybWF0ID09ICJ3b3JkIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInRlc3RfdG90YWxfd29yZF9yZXNwIikgJT4lCiAgYWRkX3RhbGx5KHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInRlc3RfdG90YWxfcGljX3Jlc3AiKSAlPiUKICAjIyAgICBDYWxjdWxhdGUgbWVhbiBvdmVyYWxsIHJlYWN0aW9uIHRpbWU6CiAgbXV0YXRlKG9sZF9uZXdfcnQgPSBhcy5kb3VibGUob2xkX25ld19ydCkpICU+JQogIG11dGF0ZShtZWFuX29sZF9uZXdfcnRfdG90YWwgPSBtZWFuKG9sZF9uZXdfcnQpKSAlPiUKICAjIyAgICBDYWxjdWxhdGUgbWVhbiB3b3JkIHJlYWN0aW9uIHRpbWUgKGFsbCByZXNwb25zZXMpOgogIG11dGF0ZShtZWFuX3Rlc3RfcnRfd29yZCA9IG1lYW4ob2xkX25ld19ydFtzdGltX2Zvcm1hdCA9PSAid29yZCJdKSkgJT4lCiAgIyMgICAgQ2FsY3VsYXRlIG1lYW4gcGljIHJlYWN0aW9uIHRpbWUgKGFsbCByZXNwb25zZXMpOgogIG11dGF0ZShtZWFuX3Rlc3RfcnRfcGljID0gbWVhbihvbGRfbmV3X3J0W3N0aW1fZm9ybWF0ID09ICJwaWN0dXJlIl0pKQojIyAgICBBZGQganVzdGlmaWNhdGlvbnMgYmFjayBpbjogCmV4cDFfX2Z1bGxfZGF0YSA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgbWVyZ2UoLiwgZXhwMV9fanVzdGlmaWNhdGlvbnMsIGJ5ID0gInRlc3RfaWQiKSAlPiUKICBzZWxlY3QodGVzdF9pZCwgaXAsIHN0YXJ0X2RhdGUsIHJlY19qdXN0aWZpY2F0aW9uLCBmYW1fanVzdGlmaWNhdGlvbiwgYm90aF9qdXN0aWZpY2F0aW9uLAogICAgICAgICBndWVzc19qdXN0aWZpY2F0aW9uLCBjb21tZW50cywgcmVzcF9vcHRpb24sIGl0ZW1fbmFtZSwgc3RpbV9mb3JtYXQsIGJlbG9uZ190b19zdHVkeV9saXN0LCAKICAgICAgICAgb2xkX25ldywgb2xkX25ld19ydCwgcmVjZmFtXzEsIHJlY2ZhbV8yLCB0ZXN0X3RvdGFsX3Jlc3AsIHRlc3RfdG90YWxfd29yZF9yZXNwLCAKICAgICAgICAgdGVzdF90b3RhbF9waWNfcmVzcCwgbWVhbl9vbGRfbmV3X3J0X3RvdGFsLCBtZWFuX3Rlc3RfcnRfd29yZCwgbWVhbl90ZXN0X3J0X3BpYykgJT4lCiAgbXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgbGlzdCh+bmFfaWYoLiwgIiIpKSkgJT4lCiAgcmVuYW1lKCB0ZXN0X3N0YXJ0X3RpbWUgPSAic3RhcnRfZGF0ZSIpCiMjICAgIFJlbW92ZSBwJ3Mgd2l0aCBpbmNvbXBsZXRlIHRlc3QgZGF0YToKZXhwMV9faW5jb21wbGV0ZV9leHAxX19mdWxsX2RhdGEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIHNlbGVjdCh0ZXN0X2lkLCB0ZXN0X3RvdGFsX3Jlc3ApICU+JQogIGRpc3RpbmN0KHRlc3RfaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JQogIGZpbHRlcih0ZXN0X3RvdGFsX3Jlc3AgIT0gMTIwKSAlPiUKICBwdWxsKHRlc3RfaWQpCmV4cDFfX2Z1bGxfZGF0YSA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgZmlsdGVyKCF0ZXN0X2lkICVpbiUgZXhwMV9faW5jb21wbGV0ZV9leHAxX19mdWxsX2RhdGEpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgTWF0Y2ggc3R1ZHkgYWNyb3NzIHNlcGVyYXRlIHN0dWR5IGFuZCB0ZXN0IGZpbGVzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIExpc3QgYWxsIHRoZSB1bmlxdWUgcGFydGljaXBhbnRzIHdlIGhhdmUgaW4gJ3BhcnRpY2lwYW50IGluZm8nOiAKZXhwMV9fdW5pcXVlX3BfYXRfc3R1ZHkgPC0gZXhwMV9fcGFydGljaXBhbnRfaW5mbyAlPiUKICBzZWxlY3Qoc3R1ZHlfaWQsIGlwLCBzdHVkeV9lbmRfdGltZSkgJT4lCiAgcmVuYW1lKHRpbWUgPSAic3R1ZHlfZW5kX3RpbWUiKSAlPiUKICBtdXRhdGUodGltZSA9IHN0cl9yZW1vdmUodGltZSAsICIuLi4kIikpICU+JQogIGFycmFuZ2UoaXAsIHRpbWUpCiMjICAgIExpc3QgYWxsIHRoZSB1bmlxdWUgcGFydGljaXBhbnRzIHdlIGhhdmUgaW4gJ2V4cDFfX2Z1bGxfZGF0YScsIGFuZCBmb3JtYXQgdGVzdF9zdGFydF90aW1lIHRvIHNpbXBsaWZpZWQgdmVyc2lvbjoKZXhwMV9fdW5pcXVlX3BfYXRfdGVzdCA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgc2VsZWN0KHRlc3RfaWQsIGlwLCB0ZXN0X3N0YXJ0X3RpbWUpICU+JQogIGRpc3RpbmN0KHRlc3RfaWQsIC5rZWVwX2FsbCA9IFRSVUUpICU+JQogIHJlbmFtZSh0aW1lID0gInRlc3Rfc3RhcnRfdGltZSIpICU+JQogIG11dGF0ZSh0aW1lID0gYXMuY2hhcmFjdGVyKHRpbWUpKSAlPiUKICAjIyAgICBSZW1vdmUgc2Vjb25kcyBwcmVjaXNpb24gZnJvbSB0aW1lIGRhdGEuIFN0dWR5IGFuZCB0ZXN0IHRpbWVzIHdvbid0IG1hdGNoICpleGFjdGx5KiBiZWNhdXNlIGl0IHRvb2sgYSAKICAjIyAgICBjb3VwbGUgb2Ygc2Vjb25kcyBmb3IgdGhlbSB0byByZWRpcmVjdCBmcm9tIHRoZSBzdHVkeSBwcm9qZWN0IHRvIHRoZSB0ZXN0IHByb2plY3Qgb24gUXVhbHRyaWNzLCBzbyBoZXJlIAogICMjICAgIHdlIHJlbW92ZSBzb21lIHByZWNpc2lvbjoKICBtdXRhdGUodGltZSA9IHN0cl9yZW1vdmUodGltZSAsICIuLi4kIikpICU+JSAgICAgICAgCiAgbXV0YXRlKHRpbWUgPSBzdHJfcmVwbGFjZSh0aW1lICwgIiAiLCAiXyIpKSAlPiUKICBtdXRhdGUodGltZSA9IHN0cl9yZXBsYWNlX2FsbCh0aW1lICwgIi0iLCAiXyIpKSAlPiUKICBhcnJhbmdlKGlwLCB0aW1lKQojIyAgICBIZXJlIHdlIGpvaW4gJ2V4cDFfX3VuaXF1ZV9wX2F0X3N0dWR5JyB3aXRoICdleHAxX191bmlxdWVfcF9hdF90ZXN0JyBieSBpcCBhbmQgdGltZS4gCmV4cDFfX2FsbF9wYXJ0aWNpcGFudHMgPC0gZXhwMV9fdW5pcXVlX3BfYXRfc3R1ZHkgJT4lCiAgZnVsbF9qb2luKGV4cDFfX3VuaXF1ZV9wX2F0X3Rlc3QsIGJ5ID0gYygiaXAiLCAidGltZSIpKQojIyAgICBIb3dldmVyLCB3ZSdyZSBsZWZ0IHdpdGggYSBmZXcgTkEgcm93cyB3aGVyZSBubyBtYXRjaCB3YXMgZm91bmQuIFdlIG5vdyBzZXBhcmF0ZSB0aG9zZSBQIHRvIGludmVzdGlnYXRlLAojIyAgICBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBkbyBtYXRjaCBvciBub3QgKGkuZS4gZGlkIHRoZSB0aW1lIGNoYW5nZSBieSAxLW1pbnV0ZSB3aGlsc3QgUCB3ZXJlIAojIyAgICB0cmFuc2ZlcnJpbmcgZnJvbSBzdHVkeSA+IHRlc3QsIGhlbmNlIHdoeSBhIG1hdGNoIHdhcyBub3QgZm91bmQuIApleHAxX191bm1hdGNoZWQgPC0gZXhwMV9fYWxsX3BhcnRpY2lwYW50cyAlPiUKICBmaWx0ZXIoaXMubmEoc3R1ZHlfaWQpIHwgaXMubmEodGVzdF9pZCkpCiMjICAgIEZpcnN0IHdlIHNlZSB3aGljaCBJUHMgbWF0Y2ggKGlmIHRoZXJlcyBhbiBJUCBtYXRjaCBiZXR3ZWVuIGEgJ3N0dWR5X2lkJyBOQSByb3cgYW5kIGEgJ3Rlc3RfaWQnIE5BIHJvdywKIyMgICAgYW5kIHRoZWlyIHRpbWVzIGxvb2sgc2ltaWxhciwgaXQncyBhbG1vc3QgY2VydGFpbmx5IHRoZSBzYW1lIHBlcnNvbikuIApleHAxX19kdXBsaWNhdGVfaXBzIDwtIGV4cDFfX3VubWF0Y2hlZCAlPiUKICBncm91cF9ieShpcCkgJT4lIAogIGZpbHRlcihuKCk+MSkKIyMgICAgNCBvdXQgb2YgNSBkdXBsaWNhdGUgSVBzIGhhdmUgYSB2ZXJ5IHNpbWlsYXIgdGltZXMgYmV0d2VlbiBzdHVkeSBhbmQgdGVzdCwgYW5kIGFyZSB0aGVyZWZvcmUgYWxtb3N0IAojIyAgICBjZXJ0YWlubHkgdGhlIHNhbWUgcGVvcGxlLiBXZSdsbCBqb2luIHRoZXNlIHJvd3MgaW4gJ2V4cDFfX2FsbF9wYXJ0aWNpcGFudHMnOgpleHAxX19hbGxfcGFydGljaXBhbnRzIDwtIGV4cDFfX2FsbF9wYXJ0aWNpcGFudHMgJT4lCiAgbXV0YXRlKHRlc3RfaWQgPSByZXBsYWNlKHRlc3RfaWQsIHN0dWR5X2lkID09ICIzc2JrdXRrcGJ6MHQ3eTEiLCAidWVuaHhwajVnam9wbjR0IikpICU+JQogIG11dGF0ZSh0ZXN0X2lkID0gcmVwbGFjZSh0ZXN0X2lkLCBzdHVkeV9pZCA9PSAiMWkzc3Y0M2I2azk3N21jIiwgIjNwM2pwZ3N3aG52YXljeiIpKSAlPiUKICBtdXRhdGUodGVzdF9pZCA9IHJlcGxhY2UodGVzdF9pZCwgc3R1ZHlfaWQgPT0gIjNpNjlqbmF6MXdyeDRmcSIsICIyNDdlc3RsazFueDlsankiKSkgJT4lCiAgbXV0YXRlKHRlc3RfaWQgPSByZXBsYWNlKHRlc3RfaWQsIHN0dWR5X2lkID09ICJwZmV4cmZhcmprcHN5Z2YiLCAiMmZ3YzhuMGZ1b252dGEzIikpICU+JQogICMjICAgIEFmdGVyIHJlbW92aW5nIHRoZSBuby1sb25nZXItbmVlZGVkIGR1cGxpY2F0ZSByb3dzIChiZWNhdXNlIHdlIGNvcGllZCB0aGUgcmVsZXZhbnQgdGVzdF9pZHMgaW50byBvbmUgcm93KSwgCiAgIyMgICAgd2UncmUgbGVmdCB3aXRoIDExIHBhcnRpY2lwYW50cyB0aGF0IGNhbm5vdCBiZSByZWNvbmNpbGVkLiBXZSB3aWxsIGV4Y2x1ZGUgdGhlc2UgcGFydGljaXBhbnRzLCBhcyB0aGV5IGFyZQogICMjICAgIGVpdGhlciBtaXNzaW5nIHRlc3QgZGF0YSBvciBzdHVkeSBkYXRhLiAKICBkcm9wX25hKCkgJT4lCiAgc2VsZWN0KC1pcCwgLXRpbWUpICU+JQogICMjICAgIEFzc2lnbiBuZXcsIHNpbXBsZXIgUCBpZHM6CiAgcm93aWRfdG9fY29sdW1uKC4sICJpZCIpICU+JQogIG11dGF0ZShpZCA9IGFzLmNoYXJhY3RlcihpZCkpCmV4cDFfX2FsbF9wYXJ0aWNpcGFudHMkaWQgPC0gc3RyX3BhZChleHAxX19hbGxfcGFydGljaXBhbnRzJGlkLCB3aWR0aD0zLCBzaWRlPSJsZWZ0IiwgcGFkPSIwIikKIyMgICAgSm9pbiBzdHVkeSBhbmQgdGVzdCBkYXRhIGZvciBvdXIgJ2NvbXBsZXRlJyBwYXJ0aWNpcGFudHM6CmV4cDFfX3BhcnRpY2lwYW50X2luZm8gPC0gZXhwMV9fcGFydGljaXBhbnRfaW5mbyAlPiUKICBmaWx0ZXIoc3R1ZHlfaWQgJWluJSBleHAxX19hbGxfcGFydGljaXBhbnRzJHN0dWR5X2lkKQpleHAxX19mdWxsX2RhdGEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIGZpbHRlcih0ZXN0X2lkICVpbiUgZXhwMV9fYWxsX3BhcnRpY2lwYW50cyR0ZXN0X2lkKQpleHAxX19mdWxsX2RhdGEgPC0gZXhwMV9fYWxsX3BhcnRpY2lwYW50cyAlPiUKICBmdWxsX2pvaW4oZXhwMV9fcGFydGljaXBhbnRfaW5mbywgYnkgPSAic3R1ZHlfaWQiKSAlPiUKICBmdWxsX2pvaW4oZXhwMV9fZnVsbF9kYXRhLCBieSA9ICJ0ZXN0X2lkIikgJT4lICAgIAogICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgQ2FsY3VsYXRpb25zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFRvdGFsIGhpdHMgYW5kIG1pc3NlczoKYWRkX3RhbGx5KHN0dWRpZWRfd29yZHMgPT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAid29yZCIgJiBvbGRfbmV3ID09ICJvbGQiLCAKICAgICAgICAgIG5hbWUgPSAid29yZF9oaXQiKSAlPiUKICBhZGRfdGFsbHkoc3R1ZGllZF93b3JkcyA9PSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJ3b3JkIiAmIG9sZF9uZXcgPT0gIm5ldyIsIAogICAgICAgICAgICBuYW1lID0gIndvcmRfbWlzcyIpICU+JQogIGFkZF90YWxseShzdHVkaWVkX3BpY3MgPT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAicGljdHVyZSIgJiBvbGRfbmV3ID09ICJvbGQiLCAKICAgICAgICAgICAgbmFtZSA9ICJwaWNfaGl0IikgJT4lCiAgYWRkX3RhbGx5KHN0dWRpZWRfcGljcyA9PSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiAmIG9sZF9uZXcgPT0gIm5ldyIsIAogICAgICAgICAgICBuYW1lID0gInBpY19taXNzIikgJT4lCiAgIyMgICAgVG90YWwgRkEgYW5kIENSOgogIGFkZF90YWxseShzdHVkaWVkX3dvcmRzICE9IGJlbG9uZ190b19zdHVkeV9saXN0ICYgc3RpbV9mb3JtYXQgPT0gIndvcmQiICYgb2xkX25ldyA9PSAib2xkIiwKICAgICAgICAgICAgbmFtZSA9ICJ3b3JkX0ZBIikgJT4lCiAgYWRkX3RhbGx5KHN0dWRpZWRfd29yZHMgIT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAid29yZCIgJiBvbGRfbmV3ID09ICJuZXciLCAKICAgICAgICAgICAgbmFtZSA9ICJ3b3JkX0NSIikgJT4lCiAgYWRkX3RhbGx5KHN0dWRpZWRfcGljcyAhPSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIiAmIG9sZF9uZXcgPT0gIm9sZCIsIAogICAgICAgICAgICBuYW1lID0gInBpY19GQSIpICU+JQogIGFkZF90YWxseShzdHVkaWVkX3BpY3MgIT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAicGljdHVyZSIgJiBvbGRfbmV3ID09ICJuZXciLCAKICAgICAgICAgICAgbmFtZSA9ICJwaWNfQ1IiKSAlPiUKICAjIyAgICBSZWMvZmFtIGhpdHM6IAogIGFkZF90YWxseSgoc3R1ZGllZF93b3JkcyA9PSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJ3b3JkIikgJiAoCiAgICAocmVzcF9vcHRpb24gIT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gInJlY29sbGVjdGlvbiIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJyZWNfMyIgfCAKICAgICAgICAgcmVjZmFtXzEgPT0gInJlY180IiB8IHJlY2ZhbV8xID09ICJyZWNfNSIpKSwgbmFtZSA9ICJ3b3JkX2hpdF9yZWMiKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfd29yZHMgPT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAid29yZCIpICYgKAogICAgKHJlc3Bfb3B0aW9uICE9ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJmYW1pbGlhcml0eSIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8yID09ICJmYW1fMyIgfCAKICAgICAgICAgcmVjZmFtXzIgPT0gImZhbV80IiB8IHJlY2ZhbV8yID09ICJmYW1fNSIpKSwgbmFtZSA9ICJ3b3JkX2hpdF9mYW0iKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfd29yZHMgPT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAid29yZCIpICYgcmVjZmFtXzEgPT0gImJvdGgiLAogICAgICAgICAgICBuYW1lID0gIndvcmRfaGl0X2JvdGgiKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfd29yZHMgPT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAid29yZCIpICYgKAogICAgKHJlc3Bfb3B0aW9uICE9ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJndWVzc2luZyIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIChyZWNmYW1fMSA9PSAicmVjXzAiICYgcmVjZmFtXzIgPT0gImZhbV8wIikpKSwKICAgIG5hbWUgPSAid29yZF9oaXRfZ3Vlc3MiKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfcGljcyA9PSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIikgJiAoCiAgICAocmVzcF9vcHRpb24gIT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gInJlY29sbGVjdGlvbiIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJyZWNfMyIgfCAKICAgICAgICAgcmVjZmFtXzEgPT0gInJlY180IiB8IHJlY2ZhbV8xID09ICJyZWNfNSIpKSwgbmFtZSA9ICJwaWNfaGl0X3JlYyIpICU+JQogIGFkZF90YWxseSgoc3R1ZGllZF9waWNzID09IGJlbG9uZ190b19zdHVkeV9saXN0ICYgc3RpbV9mb3JtYXQgPT0gInBpY3R1cmUiKSAmICgKICAgIChyZXNwX29wdGlvbiAhPSAicmZfcmF0aW5ncyIgJiByZWNmYW1fMSA9PSAiZmFtaWxpYXJpdHkiKSB8CiAgICAgIChyZXNwX29wdGlvbiA9PSAicmZfcmF0aW5ncyIgJiByZWNmYW1fMiA9PSAiZmFtXzMiIHwgCiAgICAgICAgIHJlY2ZhbV8yID09ICJmYW1fNCIgfCByZWNmYW1fMiA9PSAiZmFtXzUiKSksIG5hbWUgPSAicGljX2hpdF9mYW0iKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfcGljcyA9PSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIikgJiByZWNmYW1fMSA9PSAiYm90aCIsCiAgICAgICAgICAgIG5hbWUgPSAicGljX2hpdF9ib3RoIikgJT4lCiAgYWRkX3RhbGx5KChzdHVkaWVkX3BpY3MgPT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAicGljdHVyZSIpICYgKAogICAgKHJlc3Bfb3B0aW9uICE9ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJndWVzc2luZyIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIChyZWNmYW1fMSA9PSAicmVjXzAiICYgcmVjZmFtXzIgPT0gImZhbV8wIikpKSwKICAgIG5hbWUgPSAicGljX2hpdF9ndWVzcyIpICU+JQogICMjICAgIFJlYy9mYW0gRkE6IAogIGFkZF90YWxseSgoc3R1ZGllZF93b3JkcyAhPSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJ3b3JkIikgJiAoCiAgICAocmVzcF9vcHRpb24gIT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gInJlY29sbGVjdGlvbiIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJyZWNfMyIgfCAKICAgICAgICAgcmVjZmFtXzEgPT0gInJlY180IiB8IHJlY2ZhbV8xID09ICJyZWNfNSIpKSwgbmFtZSA9ICJ3b3JkX0ZBX3JlYyIpICU+JQogIGFkZF90YWxseSgoc3R1ZGllZF93b3JkcyAhPSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJ3b3JkIikgJiAoCiAgICAocmVzcF9vcHRpb24gIT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gImZhbWlsaWFyaXR5IikgfAogICAgICAocmVzcF9vcHRpb24gPT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzIgPT0gImZhbV8zIiB8IAogICAgICAgICByZWNmYW1fMiA9PSAiZmFtXzQiIHwgcmVjZmFtXzIgPT0gImZhbV81IikpLCBuYW1lID0gIndvcmRfRkFfZmFtIikgJT4lCiAgYWRkX3RhbGx5KChzdHVkaWVkX3dvcmRzICE9IGJlbG9uZ190b19zdHVkeV9saXN0ICYgc3RpbV9mb3JtYXQgPT0gIndvcmQiKSAmIHJlY2ZhbV8xID09ICJib3RoIiwKICAgICAgICAgICAgbmFtZSA9ICJ3b3JkX0ZBX2JvdGgiKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfd29yZHMgIT0gYmVsb25nX3RvX3N0dWR5X2xpc3QgJiBzdGltX2Zvcm1hdCA9PSAid29yZCIpICYgKAogICAgKHJlc3Bfb3B0aW9uICE9ICJyZl9yYXRpbmdzIiAmIHJlY2ZhbV8xID09ICJndWVzc2luZyIpIHwKICAgICAgKHJlc3Bfb3B0aW9uID09ICJyZl9yYXRpbmdzIiAmIChyZWNmYW1fMSA9PSAicmVjXzAiICYgcmVjZmFtXzIgPT0gImZhbV8wIikpKSwKICAgIG5hbWUgPSAid29yZF9GQV9ndWVzcyIpICU+JQogIGFkZF90YWxseSgoc3R1ZGllZF9waWNzICE9IGJlbG9uZ190b19zdHVkeV9saXN0ICYgc3RpbV9mb3JtYXQgPT0gInBpY3R1cmUiKSAmICgKICAgIChyZXNwX29wdGlvbiAhPSAicmZfcmF0aW5ncyIgJiByZWNmYW1fMSA9PSAicmVjb2xsZWN0aW9uIikgfAogICAgICAocmVzcF9vcHRpb24gPT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gInJlY18zIiB8IAogICAgICAgICByZWNmYW1fMSA9PSAicmVjXzQiIHwgcmVjZmFtXzEgPT0gInJlY181IikpLCBuYW1lID0gInBpY19GQV9yZWMiKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfcGljcyAhPSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIikgJiAoCiAgICAocmVzcF9vcHRpb24gIT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gImZhbWlsaWFyaXR5IikgfAogICAgICAocmVzcF9vcHRpb24gPT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzIgPT0gImZhbV8zIiB8IAogICAgICAgICByZWNmYW1fMiA9PSAiZmFtXzQiIHwgcmVjZmFtXzIgPT0gImZhbV81IikpLCBuYW1lID0gInBpY19GQV9mYW0iKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfcGljcyAhPSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIikgJiByZWNmYW1fMSA9PSAiYm90aCIsCiAgICAgICAgICAgIG5hbWUgPSAicGljX0ZBX2JvdGgiKSAlPiUKICBhZGRfdGFsbHkoKHN0dWRpZWRfcGljcyAhPSBiZWxvbmdfdG9fc3R1ZHlfbGlzdCAmIHN0aW1fZm9ybWF0ID09ICJwaWN0dXJlIikgJiAoCiAgICAocmVzcF9vcHRpb24gIT0gInJmX3JhdGluZ3MiICYgcmVjZmFtXzEgPT0gImd1ZXNzaW5nIikgfAogICAgICAocmVzcF9vcHRpb24gPT0gInJmX3JhdGluZ3MiICYgKHJlY2ZhbV8xID09ICJyZWNfMCIgJiByZWNmYW1fMiA9PSAiZmFtXzAiKSkpLAogICAgbmFtZSA9ICJwaWNfRkFfZ3Vlc3MiKSAlPiUKICBuYV9pZiguLCAwKSAlPiUKICBzZWxlY3QoLWl0ZW1fbmFtZSwgLW9sZF9uZXcsIC1vbGRfbmV3X3J0LCAtcmVjZmFtXzEsIC1yZWNmYW1fMikgJT4lCiAgc3VtbWFyaXNlX2FsbChjb2FsZXNjZV9ieV9jb2x1bW4pICU+JQogIG11dGF0ZV9hbGwofnJlcGxhY2VfbmEoLiwgMCkpICU+JQogIGFycmFuZ2UoaWQpICU+JQogICMjICAgIFRvdGFsIHByb3AgaGl0cyBhbmQgbWlzc2VzOgogIG11dGF0ZShwcm9wX3dvcmRfaGl0ID0gd29yZF9oaXQgLyAod29yZF9oaXQgKyB3b3JkX21pc3MpKSAlPiUKICBtdXRhdGUocHJvcF93b3JkX21pc3MgPSB3b3JkX21pc3MgLyAod29yZF9oaXQgKyB3b3JkX21pc3MpKSAlPiUKICBtdXRhdGUocHJvcF9waWNfaGl0ID0gcGljX2hpdCAvIChwaWNfaGl0ICsgcGljX21pc3MpKSAlPiUgCiAgbXV0YXRlKHByb3BfcGljX21pc3MgPSBwaWNfbWlzcyAvIChwaWNfaGl0ICsgcGljX21pc3MpKSAlPiUKICAjIyAgICBUb3RhbCBwcm9wIEZBIGFuZCBDUjoKICBtdXRhdGUocHJvcF93b3JkX0ZBID0gd29yZF9GQSAvICh3b3JkX0ZBICsgd29yZF9DUikpICU+JQogIG11dGF0ZShwcm9wX3dvcmRfQ1IgPSB3b3JkX0NSIC8gKHdvcmRfRkEgKyB3b3JkX0NSKSkgJT4lCiAgbXV0YXRlKHByb3BfcGljX0ZBID0gcGljX0ZBIC8gKHBpY19GQSArIHBpY19DUikpICU+JSAKICBtdXRhdGUocHJvcF9waWNfQ1IgPSBwaWNfQ1IgLyAocGljX0ZBICsgcGljX0NSKSkgJT4lIAogICMjICAgIFByb3AgcmVjL2ZhbSBoaXRzOgogIG11dGF0ZShwcm9wX3dvcmRfaGl0X3JlYyA9IHdvcmRfaGl0X3JlYyAvIHdvcmRfaGl0KSAlPiUKICBtdXRhdGUocHJvcF93b3JkX2hpdF9mYW0gPSB3b3JkX2hpdF9mYW0gLyB3b3JkX2hpdCkgJT4lCiAgbXV0YXRlKHByb3Bfd29yZF9oaXRfYm90aCA9IHdvcmRfaGl0X2JvdGggLyB3b3JkX2hpdCkgJT4lCiAgbXV0YXRlKHByb3Bfd29yZF9oaXRfZ3Vlc3MgPSB3b3JkX2hpdF9ndWVzcyAvIHdvcmRfaGl0KSAlPiUKICBtdXRhdGUocHJvcF9waWNfaGl0X3JlYyA9IHBpY19oaXRfcmVjIC8gcGljX2hpdCkgJT4lCiAgbXV0YXRlKHByb3BfcGljX2hpdF9mYW0gPSBwaWNfaGl0X2ZhbSAvIHBpY19oaXQpICU+JQogIG11dGF0ZShwcm9wX3BpY19oaXRfYm90aCA9IHBpY19oaXRfYm90aCAvIHBpY19oaXQpICU+JQogIG11dGF0ZShwcm9wX3BpY19oaXRfZ3Vlc3MgPSBwaWNfaGl0X2d1ZXNzIC8gcGljX2hpdCkgJT4lCiAgIyMgICAgVE9UQUwgcHJvcDogCiAgbXV0YXRlKHRvdGFsX3Byb3Bfd29yZF9oaXRfcmVjID0gaWZlbHNlKHJlc3Bfb3B0aW9uID09ICJyZmJnIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bfd29yZF9oaXRfcmVjICsgcHJvcF93b3JkX2hpdF9ib3RoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF93b3JkX2hpdF9yZWMpKSAlPiUKICBtdXRhdGUodG90YWxfcHJvcF93b3JkX2hpdF9mYW0gPSBpZmVsc2UocmVzcF9vcHRpb24gPT0gInJmYmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF93b3JkX2hpdF9mYW0gKyBwcm9wX3dvcmRfaGl0X2JvdGgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX3dvcmRfaGl0X2ZhbSkpICU+JQogIG11dGF0ZSh0b3RhbF9wcm9wX3BpY19oaXRfcmVjID0gaWZlbHNlKHJlc3Bfb3B0aW9uID09ICJyZmJnIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9waWNfaGl0X3JlYyArIHByb3BfcGljX2hpdF9ib3RoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX3BpY19oaXRfcmVjKSkgJT4lCiAgbXV0YXRlKHRvdGFsX3Byb3BfcGljX2hpdF9mYW0gPSBpZmVsc2UocmVzcF9vcHRpb24gPT0gInJmYmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX3BpY19oaXRfZmFtICsgcHJvcF9waWNfaGl0X2JvdGgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfcGljX2hpdF9mYW0pKSAlPiUKICAjIyAgICBQcm9wIHJlYy9mYW0gRkE6CiAgbXV0YXRlKHByb3Bfd29yZF9GQV9yZWMgPSB3b3JkX0ZBX3JlYyAvIHdvcmRfRkEpICU+JQogIG11dGF0ZShwcm9wX3dvcmRfRkFfZmFtID0gd29yZF9GQV9mYW0gLyB3b3JkX0ZBKSAlPiUKICBtdXRhdGUocHJvcF93b3JkX0ZBX2JvdGggPSB3b3JkX0ZBX2JvdGggLyB3b3JkX0ZBKSAlPiUKICBtdXRhdGUocHJvcF93b3JkX0ZBX2d1ZXNzID0gd29yZF9GQV9ndWVzcyAvIHdvcmRfRkEpICU+JQogIG11dGF0ZShwcm9wX3BpY19GQV9yZWMgPSBwaWNfRkFfcmVjIC8gcGljX0ZBKSAlPiUKICBtdXRhdGUocHJvcF9waWNfRkFfZmFtID0gcGljX0ZBX2ZhbSAvIHBpY19GQSkgJT4lCiAgbXV0YXRlKHByb3BfcGljX0ZBX2JvdGggPSBwaWNfRkFfYm90aCAvIHBpY19GQSkgJT4lCiAgbXV0YXRlKHByb3BfcGljX0ZBX2d1ZXNzID0gcGljX0ZBX2d1ZXNzIC8gcGljX0ZBKSAlPiUKICAjIyAgICBUT1RBTCBwcm9wOiAKICBtdXRhdGUodG90YWxfcHJvcF93b3JkX0ZBX3JlYyA9IGlmZWxzZShyZXNwX29wdGlvbiA9PSAicmZiZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF93b3JkX0ZBX3JlYyArIHByb3Bfd29yZF9GQV9ib3RoLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX3dvcmRfRkFfcmVjKSkgJT4lCiAgbXV0YXRlKHRvdGFsX3Byb3Bfd29yZF9GQV9mYW0gPSBpZmVsc2UocmVzcF9vcHRpb24gPT0gInJmYmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bfd29yZF9GQV9mYW0gKyBwcm9wX3dvcmRfRkFfYm90aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF93b3JkX0ZBX2ZhbSkpICU+JQogIG11dGF0ZSh0b3RhbF9wcm9wX3BpY19GQV9yZWMgPSBpZmVsc2UocmVzcF9vcHRpb24gPT0gInJmYmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9waWNfRkFfcmVjICsgcHJvcF9waWNfRkFfYm90aCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wX3BpY19GQV9yZWMpKSAlPiUKICBtdXRhdGUodG90YWxfcHJvcF9waWNfRkFfZmFtID0gaWZlbHNlKHJlc3Bfb3B0aW9uID09ICJyZmJnIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BfcGljX0ZBX2ZhbSArIHByb3BfcGljX0ZBX2JvdGgsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcF9waWNfRkFfZmFtKSkgJT4lCiAgIyMgICAgUmVjb2c6IAogIG11dGF0ZSh3b3JkX3JlY29nID0gcHJvcF93b3JkX2hpdCAtIHByb3Bfd29yZF9GQSkgJT4lCiAgbXV0YXRlKHBpY19yZWNvZyA9IHByb3BfcGljX2hpdCAtIHByb3BfcGljX0ZBKSAlPiUKICAjIyAgICBDbGFzc2ljIHotc2NvcmUgY2FsY3VsYXRpb25zICh0YWtlIFBzIHNjb3JlLCBzdWJ0cmFjdCB0aGUgbWVhbiwgYW5kIGRpdmlkZSB0aGUgZGlmZmVyZW5jZSBieSB0aGUgU0QpOiAKICAjbXV0YXRlKGNsYXNzaWNfel9oaXRfd29yZCA9ICh3b3JkX2hpdCAtIG1lYW4od29yZF9oaXQpKSAvIHNkKHdvcmRfaGl0KSkgJT4lCiAgI211dGF0ZShjbGFzc2ljX3pfRkFfd29yZCA9ICh3b3JkX0ZBIC0gbWVhbih3b3JkX0ZBKSkgLyBzZCh3b3JkX0ZBKSkgJT4lCiAgI211dGF0ZShjbGFzc2ljX3pfaGl0X3BpY3R1cmUgPSAocGljX2hpdCAtIG1lYW4ocGljX2hpdCkpIC8gc2QocGljX2hpdCkpICU+JQogICNtdXRhdGUoY2xhc3NpY196X0ZBX3BpY3R1cmUgPSAocGljX0ZBIC0gbWVhbihwaWNfRkEpKSAvIHNkKHBpY19GQSkpICU+JQogICMjICAgIHotc2NvcmVzIChob3cgd2UgcHJldmlvdXNseSBjYWxjdWxhdGVkIHRoZW0gaW4gRXhjZWw6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgICAoPU5PUk1TSU5WKChFUzgrMC41KSAvIFNVTShFUzg6RVQ4LDEpKS4gInFub3JtIiBpcyB0aGUgciBlcXVpdmVsYW50IG9mICI9Tk9STVNJTlYiOiBJbnZlcnNlIG9mIHRoZSAKICAjIyAgICBzdGFuZGFyZCBub3JtYWwgY3VtdWxhdGl2ZSBkaXN0cmlidXRpb24sIHdpdGggYSBwcm9iYWJpbGl0eSBvZiB4ICh0aGUgdmFsdWUgd2UgY2FsY3VsYXRlZCkuKQogIG11dGF0ZSgiel93b3JkX2hpdCIgPSBxbm9ybSgod29yZF9oaXQgKyAwLjUpIC8gKHdvcmRfaGl0ICsgd29yZF9taXNzICsgMSkpKSAlPiUKICBtdXRhdGUoInpfd29yZF9GQSIgPSBxbm9ybSgod29yZF9GQSArIDAuNSkgLyAod29yZF9GQSArIHdvcmRfQ1IgKyAxKSkpICU+JSAgCiAgbXV0YXRlKCJ6X3BpY19oaXQiID0gcW5vcm0oKHBpY19oaXQgKyAwLjUpIC8gKHBpY19oaXQgKyBwaWNfbWlzcyArIDEpKSkgJT4lCiAgbXV0YXRlKCJ6X3BpY19GQSIgPSBxbm9ybSgocGljX0ZBICsgMC41KSAvIChwaWNfRkEgKyBwaWNfQ1IgKyAxKSkpICU+JQogICMjICAgIEFjY3VyYWN5OgogIG11dGF0ZSh3b3JkX2FjY3VyYWN5X3JlY19yYXcgPSB3b3JkX2hpdF9yZWMgLyAod29yZF9oaXRfcmVjICsgd29yZF9GQV9yZWMpKSAlPiUKICBtdXRhdGUod29yZF9hY2N1cmFjeV9mYW1fcmF3ID0gd29yZF9oaXRfZmFtIC8gKHdvcmRfaGl0X2ZhbSArIHdvcmRfRkFfZmFtKSkgJT4lCiAgbXV0YXRlKHdvcmRfYWNjdXJhY3lfYm90aF9yYXcgPSB3b3JkX2hpdF9ib3RoIC8gKHdvcmRfaGl0X2JvdGggKyB3b3JkX0ZBX2JvdGgpKSAlPiUKICBtdXRhdGUod29yZF9hY2N1cmFjeV9ndWVzc2luZ19yYXcgPSB3b3JkX2hpdF9ndWVzcyAvICh3b3JkX2hpdF9ndWVzcyArIHdvcmRfRkFfZ3Vlc3MpKSAlPiUKICBtdXRhdGUocGljX2FjY3VyYWN5X3JlY19yYXcgPSBwaWNfaGl0X3JlYyAvIChwaWNfaGl0X3JlYyArIHBpY19GQV9yZWMpKSAlPiUKICBtdXRhdGUocGljX2FjY3VyYWN5X2ZhbV9yYXcgPSBwaWNfaGl0X2ZhbSAvIChwaWNfaGl0X2ZhbSArIHBpY19GQV9mYW0pKSAlPiUKICBtdXRhdGUocGljX2FjY3VyYWN5X2JvdGhfcmF3ID0gcGljX2hpdF9ib3RoIC8gKHBpY19oaXRfYm90aCArIHBpY19GQV9ib3RoKSkgJT4lCiAgbXV0YXRlKHBpY19hY2N1cmFjeV9ndWVzc2luZ19yYXcgPSBwaWNfaGl0X2d1ZXNzIC8gKHBpY19oaXRfZ3Vlc3MgKyBwaWNfRkFfZ3Vlc3MpKSAlPiUKICAjIyAgICBBY2N1cmFjeSB0b3RhbHM6CiAgbXV0YXRlKHRvdGFsX2FjY193b3JkX2hpdF9yZWMgPSBpZmVsc2UocmVzcF9vcHRpb24gPT0gInJmYmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHdvcmRfaGl0X3JlYyArIHdvcmRfaGl0X2JvdGgpIC8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHdvcmRfaGl0X3JlYyArIHdvcmRfaGl0X2JvdGggKyB3b3JkX0ZBX3JlYyArIHdvcmRfRkFfYm90aCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmRfYWNjdXJhY3lfcmVjX3JhdykpICU+JQogIG11dGF0ZSh0b3RhbF9hY2Nfd29yZF9oaXRfZmFtID0gaWZlbHNlKHJlc3Bfb3B0aW9uID09ICJyZmJnIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh3b3JkX2hpdF9mYW0gKyB3b3JkX2hpdF9ib3RoKSAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh3b3JkX2hpdF9mYW0gKyB3b3JkX2hpdF9ib3RoICsgd29yZF9GQV9mYW0gKyB3b3JkX0ZBX2JvdGgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JkX2FjY3VyYWN5X2ZhbV9yYXcpKSAlPiUKICBtdXRhdGUodG90YWxfYWNjX3BpY19oaXRfcmVjID0gaWZlbHNlKHJlc3Bfb3B0aW9uID09ICJyZmJnIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBpY19oaXRfcmVjICsgcGljX2hpdF9ib3RoKSAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBpY19oaXRfcmVjICsgcGljX2hpdF9ib3RoICsgcGljX0ZBX3JlYyArIHBpY19GQV9ib3RoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNfYWNjdXJhY3lfcmVjX3JhdykpICU+JQogIG11dGF0ZSh0b3RhbF9hY2NfcGljX2hpdF9mYW0gPSBpZmVsc2UocmVzcF9vcHRpb24gPT0gInJmYmciLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGljX2hpdF9mYW0gKyBwaWNfaGl0X2JvdGgpIC8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGljX2hpdF9mYW0gKyBwaWNfaGl0X2JvdGggKyBwaWNfRkFfZmFtICsgcGljX0ZBX2JvdGgpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY19hY2N1cmFjeV9mYW1fcmF3KSkgJT4lCiAgIyMgICAgZCdwcmltZSAoY2FsY3VsYXRlZCBpbiB0aGUgc2FtZSB3YXkgd2UgZGlkIGluIEV4Y2VsKToKICBtdXRhdGUoIm9sZF93b3JkX2RfcHJpbWUiID0gel93b3JkX2hpdCAtIHpfd29yZF9GQSkgJT4lCiAgbXV0YXRlKCJvbGRfcGljdHVyZV9kX3ByaW1lIiA9IHpfcGljX2hpdCAtIHpfcGljX0ZBKQojIyAgICBkJ3ByaW1lIChjYWxjdWxhdGVkIGJ5IFIgcGFja2FnZSk6CmV4cDFfX3BhcnRpY2lwYW50X0lEcyA8LSB1bmlxdWUoZXhwMV9fZnVsbF9kYXRhJGlkKQojIyAgICB3b3JkIGQncHJpbWUgKGNhbGN1bGF0ZWQgYnkgUiBwYWNrYWdlKToKZXhwMV9fd29yZF9kX3ByaW1lIDwtIHRpYmJsZSgpCmZvciAoaSBpbiBleHAxX19wYXJ0aWNpcGFudF9JRHMpIHsKICBleHAxX190ZW1wIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICAgIGZpbHRlcihpZCA9PSBpKSAlPiUKICAgIHNlbGVjdChpZCwgd29yZF9oaXQsIHdvcmRfRkEsIHdvcmRfbWlzcywgd29yZF9DUikKICBleHAxX190ZW1wX2RfcHJpbWUgPC0gKGFzLnRpYmJsZShkcHJpbWUobl9oaXQgPSBleHAxX190ZW1wJHdvcmRfaGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZmEgPSBleHAxX190ZW1wJHdvcmRfRkEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9taXNzID0gZXhwMV9fdGVtcCR3b3JkX21pc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jciA9IGV4cDFfX3RlbXAkd29yZF9DUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3RhcmdldHMgPSA2MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2Rpc3RyYWN0b3JzID0gNjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWQgPSBUUlVFKSkpICU+JQogICAgIyMgIEFkanVzdG1lbnRzIGZvciBleHRyZW1lIHZhbHVlcyBhcmUgbWFkZSBmb2xsb3dpbmcgdGhlIHJlY29tbWFuZGF0aW9ucyBvZiBIYXV0dXMgKDE5OTUpLgogICAgbXV0YXRlKCJpZCIgPSBpKQogIGV4cDFfX3RlbXAgPC0gZXhwMV9fdGVtcCAlPiUgaW5uZXJfam9pbihleHAxX190ZW1wX2RfcHJpbWUsIGJ5ID0gImlkIikKICBleHAxX193b3JkX2RfcHJpbWUgPC0gYmluZF9yb3dzKGV4cDFfX3dvcmRfZF9wcmltZSwgZXhwMV9fdGVtcCkgfQpleHAxX193b3JkX2RfcHJpbWUgPC0gZXhwMV9fd29yZF9kX3ByaW1lICU+JQogIHNlbGVjdChpZCwgZHByaW1lLCBiZXRhLCBhcHJpbWUsIGJwcGQsIGMpICU+JQogIHJlbmFtZShleHAxX193b3JkX2RfcHJpbWUgPSAiZHByaW1lIiwgd29yZF9iZXRhID0gImJldGEiLCB3b3JkX2FfcHJpbWUgPSAiYXByaW1lIiwKICAgICAgICAgd29yZF9icHBkID0gImJwcGQiLCB3b3JkX2MgPSAiYyIpCiMjICAgIFBpY3R1cmUgZCdwcmltZSAoY2FsY3VsYXRlZCBieSBSIHBhY2thZ2UpOgpleHAxX19waWNfZF9wcmltZSA8LSB0aWJibGUoKQpmb3IgKGkgaW4gZXhwMV9fcGFydGljaXBhbnRfSURzKSB7CiAgZXhwMV9fdGVtcCA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgICBmaWx0ZXIoaWQgPT0gaSkgJT4lCiAgICBzZWxlY3QoaWQsIHBpY19oaXQsIHBpY19GQSwgcGljX21pc3MsIHBpY19DUikKICBleHAxX190ZW1wX2RfcHJpbWUgPC0gKGFzLnRpYmJsZShkcHJpbWUobl9oaXQgPSBleHAxX190ZW1wJHBpY19oaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9mYSA9IGV4cDFfX3RlbXAkcGljX0ZBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fbWlzcyA9IGV4cDFfX3RlbXAkcGljX21pc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jciA9IGV4cDFfX3RlbXAkcGljX0NSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fdGFyZ2V0cyA9IDYwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZGlzdHJhY3RvcnMgPSA2MCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IFRSVUUpKSkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIG11dGF0ZSgiaWQiID0gaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIGV4cDFfX3RlbXAgPC0gZXhwMV9fdGVtcCAlPiUgaW5uZXJfam9pbihleHAxX190ZW1wX2RfcHJpbWUsIGJ5ID0gImlkIikKICBleHAxX19waWNfZF9wcmltZSA8LSBiaW5kX3Jvd3MoZXhwMV9fcGljX2RfcHJpbWUsIGV4cDFfX3RlbXApIH0KZXhwMV9fcGljX2RfcHJpbWUgPC0gZXhwMV9fcGljX2RfcHJpbWUgJT4lCiAgc2VsZWN0KGlkLCBkcHJpbWUsIGJldGEsIGFwcmltZSwgYnBwZCwgYykgJT4lCiAgcmVuYW1lKGV4cDFfX3BpY19kX3ByaW1lID0gImRwcmltZSIsIHBpY19iZXRhID0gImJldGEiLCBwaWNfYV9wcmltZSA9ICJhcHJpbWUiLAogICAgICAgICBwaWNfYnBwZCA9ICJicHBkIiwgcGljX2MgPSAiYyIpCgojIyBBZGQgbmV3IGQncHJpbWUgY2FsY3VsYXRpb25zIHRvICJleHAxX19mdWxsX2RhdGEiIGRmOiAKZXhwMV9fZnVsbF9kYXRhIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICByaWdodF9qb2luKGV4cDFfX3dvcmRfZF9wcmltZSwgYnkgPSAiaWQiKSAlPiUKICByaWdodF9qb2luKGV4cDFfX3BpY19kX3ByaW1lLCBieSA9ICJpZCIpICU+JQogIHJlbmFtZShSZXNwb25zZU9wdGlvbiA9ICJyZXNwX29wdGlvbiIpICU+JQogIG11dGF0ZShSZXNwb25zZU9wdGlvbiA9IHRvdXBwZXIoUmVzcG9uc2VPcHRpb24pKSAlPiUKICBtdXRhdGUoUmVzcG9uc2VPcHRpb24gPSBzdHJfcmVwbGFjZShSZXNwb25zZU9wdGlvbiwgIlJGX1JBVElOR1MiLCAiUkZfUmF0aW5ncyIpKSAlPiUKICBtdXRhdGUoYWdlID0gbmFfaWYoYWdlLCAwKSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBBbmFseXNpcyAtIFByb3AgSGl0cyBBTk9WQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9faGl0X2Fub3ZhX2RhdGEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIHNlbGVjdChpZCwgUmVzcG9uc2VPcHRpb24sIHByb3BfcGljX2hpdCwgcHJvcF93b3JkX2hpdCkgJT4lCiAgcmVuYW1lKHBpY3R1cmUgPSAicHJvcF9waWNfaGl0Iiwgd29yZCA9ICJwcm9wX3dvcmRfaGl0IikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAiaGl0IiwgcGljdHVyZSwgd29yZCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJwaWN0dXJlIiwgIlBpY3R1cmVzIikpICU+JQogIHRyYW5zZm9ybShTdGltdWxpRm9ybWF0ID0gZmFjdG9yKFN0aW11bGlGb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIlBpY3R1cmVzIikpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwgIlJGX1JhdGluZ3MiKSkpCgojIyAgMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDFfX2Fub3ZhX3Byb3BfaGl0IDwtIGFvdl9leigiaWQiLCAiaGl0IiwgZXhwMV9faGl0X2Fub3ZhX2RhdGEsIGJldHdlZW4gPSAiUmVzcG9uc2VPcHRpb24iLCB3aXRoaW4gPSAiU3RpbXVsaUZvcm1hdCIpCiMjICBQb3N0LWhvYyBjb250cmFzdHM6CiMjICBTdGltdWxpLWZvcm1hdDoKZXhwMV9fYW5vdmFfcHJvcF9oaXRfc3RpbV9mb3JtYXRfbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9oaXQsIH4gU3RpbXVsaUZvcm1hdCkKZXhwMV9fYW5vdmFfcHJvcF9oaXRfc3RpbV9mb3JtYXRfcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9oaXRfc3RpbV9mb3JtYXRfbW1lYW5zKQoKIyMgIFJlc3BvbnNlLW9wdGlvbjoKZXhwMV9fYW5vdmFfcHJvcF9oaXRfcmVzcF9vcHRpb25fbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9oaXQsIH4gUmVzcG9uc2VPcHRpb24pCmV4cDFfX2Fub3ZhX3Byb3BfaGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlIDwtIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfaGl0X3Jlc3Bfb3B0aW9uX21tZWFucykKCgojIyAgSW50ZXJhY3Rpb24gbWVhbnMgKGZvciBmaWd1cmUpOiAKZXhwMV9fYW5vdmFfcHJvcF9oaXRfaW50ZXJhY3Rpb25fbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9oaXQsIGMoIlJlc3BvbnNlT3B0aW9uIiwgIlN0aW11bGlGb3JtYXQiKSkKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlczogIApleHAxX190b3RhbF9wcm9wX2hpdF9maWd1cmVfZGF0YSA8LSBhcy50aWJibGUoZXhwMV9fYW5vdmFfcHJvcF9oaXRfaW50ZXJhY3Rpb25fbW1lYW5zKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKZHB1dChleHAxX190b3RhbF9wcm9wX2hpdF9maWd1cmVfZGF0YSkKIyMgIFRhYmxlOiAKZXhwMV9fcmZnX3RvdGFscyA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgZmlsdGVyKFJlc3BvbnNlT3B0aW9uID09ICJSRkciKSAlPiUKICBtdXRhdGUodG90YWxfaGl0ID0gd29yZF9oaXQgKyBwaWNfaGl0KSAlPiUKICBtdXRhdGUodG90YWxfRkEgPSB3b3JkX0ZBICsgcGljX0ZBKQpleHAxX19yZmJnX3RvdGFscyA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgZmlsdGVyKFJlc3BvbnNlT3B0aW9uID09ICJSRkJHIikgJT4lCiAgbXV0YXRlKHRvdGFsX2hpdCA9IHdvcmRfaGl0ICsgcGljX2hpdCkgJT4lCiAgbXV0YXRlKHRvdGFsX0ZBID0gd29yZF9GQSArIHBpY19GQSkKZXhwMV9fcmZfcl90b3RhbHMgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIGZpbHRlcihSZXNwb25zZU9wdGlvbiA9PSAiUkZfUmF0aW5ncyIpICU+JQogIG11dGF0ZSh0b3RhbF9oaXQgPSB3b3JkX2hpdCArIHBpY19oaXQpICU+JQogIG11dGF0ZSh0b3RhbF9GQSA9IHdvcmRfRkEgKyBwaWNfRkEpCgpleHAxX190YWJsZV9oaXRzX2FuZF9GQXMgPC0gdHJpYmJsZSgKICB+IlN0aW0iLCB+SGl0cywgIH5GQXMsCiAgIldvcmRzIiwgbWVhbihleHAxX19mdWxsX2RhdGEkcHJvcF93b3JkX2hpdCksIG1lYW4oZXhwMV9fZnVsbF9kYXRhJHByb3Bfd29yZF9GQSksCiAgIlBpY3R1cmVzIiwgbWVhbihleHAxX19mdWxsX2RhdGEkcHJvcF9waWNfaGl0KSwgbWVhbihleHAxX19mdWxsX2RhdGEkcHJvcF9waWNfRkEpLAogICJSRkciLCBtZWFuKGV4cDFfX3JmZ190b3RhbHMkdG90YWxfaGl0KSAvIDYwLCBtZWFuKGV4cDFfX3JmZ190b3RhbHMkdG90YWxfRkEpIC8gNjAsCiAgIlJGQkciLCBtZWFuKGV4cDFfX3JmYmdfdG90YWxzJHRvdGFsX2hpdCkgLyA2MCwgbWVhbihleHAxX19yZmJnX3RvdGFscyR0b3RhbF9GQSkgLyA2MCwKICAiUkYtUmF0aW5ncyIsIG1lYW4oZXhwMV9fcmZfcl90b3RhbHMkdG90YWxfaGl0KSAvIDYwLCBtZWFuKGV4cDFfX3JmX3JfdG90YWxzJHRvdGFsX0ZBKSAvIDYwKSAlPiUKICBtdXRhdGVfaWYoaXMubnVtZXJpYywgcm91bmQsIDIpICU+JQogIGNvbHVtbl90b19yb3duYW1lcyh2YXIgPSAiU3RpbSIpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIEFuYWx5c2lzIC0gUHJvcCBGQSBBTk9WQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAxX19GQV9hbm92YV9kYXRhIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICBzZWxlY3QoaWQsIFJlc3BvbnNlT3B0aW9uLCBwcm9wX3BpY19GQSwgcHJvcF93b3JkX0ZBKSAlPiUKICByZW5hbWUocGljdHVyZSA9ICJwcm9wX3BpY19GQSIsIHdvcmQgPSAicHJvcF93b3JkX0ZBIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAiRkEiLCBwaWN0dXJlLCB3b3JkKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgIlJlc3BvbnNlT3B0aW9uIiwgIlN0aW11bGlGb3JtYXQiKSwgZmFjdG9yKSAlPiUgCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJwaWN0dXJlIiwgIlBpY3R1cmVzIikpICU+JQogIHRyYW5zZm9ybShTdGltdWxpRm9ybWF0ID0gZmFjdG9yKFN0aW11bGlGb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIlBpY3R1cmVzIikpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwgIlJGX1JhdGluZ3MiKSkpCgojIyAgMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDFfX2Fub3ZhX3Byb3BfRkEgPC0gYW92X2V6KCJpZCIsICJGQSIsIGV4cDFfX0ZBX2Fub3ZhX2RhdGEsIGJldHdlZW4gPSAiUmVzcG9uc2VPcHRpb24iLCB3aXRoaW4gPSAiU3RpbXVsaUZvcm1hdCIpCgojIyAgUG9zdC1ob2MgY29udHJhc3RzOgojIyAgU3RpbXVsaS1mb3JtYXQ6CmV4cDFfX2Fub3ZhX3Byb3BfRkFfc3RpbV9mb3JtYXRfbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9GQSwgfiBTdGltdWxpRm9ybWF0KQpleHAxX19hbm92YV9wcm9wX0ZBX3N0aW1fZm9ybWF0X3BhaXJ3aXNlIDwtIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfRkFfc3RpbV9mb3JtYXRfbW1lYW5zKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIEFuYWx5c2lzIC0gT3ZlcmFsbCByZWNvZ25pdGlvbjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAxX19vdmVyYWxsX3JlY29nX2Fub3ZhX2RhdGEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIHNlbGVjdChpZCwgUmVzcG9uc2VPcHRpb24sIHBpY19yZWNvZywgd29yZF9yZWNvZykgJT4lCiAgcmVuYW1lKHBpY3R1cmUgPSAicGljX3JlY29nIiwgd29yZCA9ICJ3b3JkX3JlY29nIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAicmVjb2ciLCBwaWN0dXJlLCB3b3JkKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgIlJlc3BvbnNlT3B0aW9uIiwgIlN0aW11bGlGb3JtYXQiKSwgZmFjdG9yKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJ3b3JkIiwgIldvcmRzIikpICU+JQogIG11dGF0ZShTdGltdWxpRm9ybWF0ID0gc3RyX3JlcGxhY2UoU3RpbXVsaUZvcm1hdCwgInBpY3R1cmUiLCAiUGljdHVyZXMiKSkgJT4lCiAgdHJhbnNmb3JtKFN0aW11bGlGb3JtYXQgPSBmYWN0b3IoU3RpbXVsaUZvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiUGljdHVyZXMiKSkpICU+JQogIHRyYW5zZm9ybShSZXNwb25zZU9wdGlvbiA9IGZhY3RvcihSZXNwb25zZU9wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciLCAiUkZfUmF0aW5ncyIpKSkKCiMjICAyLXdheSBtaXhlZCBBTk9WQToKZXhwMV9fYW5vdmFfcHJvcF9yZWNvZyA8LSBhb3ZfZXooImlkIiwgInJlY29nIiwgZXhwMV9fb3ZlcmFsbF9yZWNvZ19hbm92YV9kYXRhLCBiZXR3ZWVuID0gIlJlc3BvbnNlT3B0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluID0gIlN0aW11bGlGb3JtYXQiKQoKIyMgIFBvc3QtaG9jIGNvbnRyYXN0czoKIyMgIFN0aW11bGktZm9ybWF0OgpleHAxX19hbm92YV9wcm9wX3JlY29nX3N0aW1fZm9ybWF0X21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjb2csIH4gU3RpbXVsaUZvcm1hdCkKZXhwMV9fYW5vdmFfcHJvcF9yZWNvZ19zdGltX2Zvcm1hdF9wYWlyd2lzZSA8LSBwYWlycyhleHAxX19hbm92YV9wcm9wX3JlY29nX3N0aW1fZm9ybWF0X21tZWFucykKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgQW5hbHlzaXMgLSBkJyBhbmQgYzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICBkcHJpbWU6CmV4cDFfX2RwcmltZV9hbm92YV9kYXRhIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICBzZWxlY3QoaWQsIFJlc3BvbnNlT3B0aW9uLCBleHAxX19waWNfZF9wcmltZSwgZXhwMV9fd29yZF9kX3ByaW1lKSAlPiUKICByZW5hbWUocGljdHVyZSA9ICJleHAxX19waWNfZF9wcmltZSIsIHdvcmQgPSAiZXhwMV9fd29yZF9kX3ByaW1lIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAiZHByaW1lIiwgcGljdHVyZSwgd29yZCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJwaWN0dXJlIiwgIlBpY3R1cmVzIikpICU+JQogIHRyYW5zZm9ybShTdGltdWxpRm9ybWF0ID0gZmFjdG9yKFN0aW11bGlGb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIlBpY3R1cmVzIikpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwgIlJGX1JhdGluZ3MiKSkpCgojIyAgMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDFfX2Fub3ZhX3Byb3BfZHByaW1lIDwtIGFvdl9leigiaWQiLCAiZHByaW1lIiwgZXhwMV9fZHByaW1lX2Fub3ZhX2RhdGEsIGJldHdlZW4gPSAiUmVzcG9uc2VPcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluID0gIlN0aW11bGlGb3JtYXQiKQoKIyMgIFBvc3QtaG9jIGNvbnRyYXN0czoKIyMgIFN0aW11bGktZm9ybWF0OgpleHAxX19hbm92YV9wcm9wX2RwcmltZV9zdGltX2Zvcm1hdF9tbWVhbnMgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2RwcmltZSwgfiBTdGltdWxpRm9ybWF0KQpleHAxX19hbm92YV9wcm9wX2RwcmltZV9zdGltX2Zvcm1hdF9wYWlyd2lzZSA8LSBwYWlycyhleHAxX19hbm92YV9wcm9wX2RwcmltZV9zdGltX2Zvcm1hdF9tbWVhbnMpCgojIyAgYzoKZXhwMV9fY19hbm92YV9kYXRhIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICBzZWxlY3QoaWQsIFJlc3BvbnNlT3B0aW9uLCBwaWNfYywgd29yZF9jKSAlPiUKICByZW5hbWUocGljdHVyZSA9ICJwaWNfYyIsIHdvcmQgPSAid29yZF9jIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAiYyIsIHBpY3R1cmUsIHdvcmQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfYXQodmFycygiaWQiLCAiUmVzcG9uc2VPcHRpb24iLCAiU3RpbXVsaUZvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShTdGltdWxpRm9ybWF0ID0gc3RyX3JlcGxhY2UoU3RpbXVsaUZvcm1hdCwgIndvcmQiLCAiV29yZHMiKSkgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAicGljdHVyZSIsICJQaWN0dXJlcyIpKSAlPiUKICB0cmFuc2Zvcm0oU3RpbXVsaUZvcm1hdCA9IGZhY3RvcihTdGltdWxpRm9ybWF0LCBsZXZlbHM9YygiV29yZHMiLCJQaWN0dXJlcyIpKSkgJT4lCiAgdHJhbnNmb3JtKFJlc3BvbnNlT3B0aW9uID0gZmFjdG9yKFJlc3BvbnNlT3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIsICJSRl9SYXRpbmdzIikpKQoKIyMgIDItd2F5IG1peGVkIEFOT1ZBOgpleHAxX19hbm92YV9wcm9wX2MgPC0gYW92X2V6KCJpZCIsICJjIiwgZXhwMV9fY19hbm92YV9kYXRhLCBiZXR3ZWVuID0gIlJlc3BvbnNlT3B0aW9uIiwgd2l0aGluID0gIlN0aW11bGlGb3JtYXQiKQoKIyMgIFBvc3QtaG9jIGNvbnRyYXN0czoKIyMgIFN0aW11bGktZm9ybWF0OgpleHAxX19hbm92YV9wcm9wX2NfcmVzcF9vcHRpb25fbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9jLCB+IFJlc3BvbnNlT3B0aW9uKQpleHAxX19hbm92YV9wcm9wX2NfcmVzcF9vcHRpb25fcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9jX3Jlc3Bfb3B0aW9uX21tZWFucykKCiMjICBUYWJsZTogCmV4cDFfX3JmZ19kcHJpbWUgPC0gYXMuZGF0YS5mcmFtZShlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfZHByaW1lLCB+IFJlc3BvbnNlT3B0aW9uKSkgJT4lIAogIGZpbHRlcihSZXNwb25zZU9wdGlvbiA9PSAiUkZHIikgJT4lIHB1bGwoZW1tZWFuKQpleHAxX19yZmJnX2RwcmltZSA8LSBhcy5kYXRhLmZyYW1lKGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9kcHJpbWUsIH4gUmVzcG9uc2VPcHRpb24pKSAlPiUgCiAgZmlsdGVyKFJlc3BvbnNlT3B0aW9uID09ICJSRkJHIikgJT4lIHB1bGwoZW1tZWFuKQpleHAxX19yZnJfZHByaW1lIDwtIGFzLmRhdGEuZnJhbWUoZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2RwcmltZSwgfiBSZXNwb25zZU9wdGlvbikpICU+JSAKICBmaWx0ZXIoUmVzcG9uc2VPcHRpb24gPT0gIlJGX1JhdGluZ3MiKSAlPiUgcHVsbChlbW1lYW4pCmV4cDFfX3JmZ19jIDwtIGFzLmRhdGEuZnJhbWUoZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2MsIH4gUmVzcG9uc2VPcHRpb24pKSAlPiUgCiAgZmlsdGVyKFJlc3BvbnNlT3B0aW9uID09ICJSRkciKSAlPiUgcHVsbChlbW1lYW4pCmV4cDFfX3JmYmdfYyA8LSBhcy5kYXRhLmZyYW1lKGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9jLCB+IFJlc3BvbnNlT3B0aW9uKSkgJT4lIAogIGZpbHRlcihSZXNwb25zZU9wdGlvbiA9PSAiUkZCRyIpICU+JSBwdWxsKGVtbWVhbikKZXhwMV9fcmZyX2MgPC0gYXMuZGF0YS5mcmFtZShlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfYywgfiBSZXNwb25zZU9wdGlvbikpICU+JSAKICBmaWx0ZXIoUmVzcG9uc2VPcHRpb24gPT0gIlJGX1JhdGluZ3MiKSAlPiUgcHVsbChlbW1lYW4pCgpleHAxX190YWJsZV9kcHJpbWVfYW5kX2MgPC0gdHJpYmJsZSgKICB+IlN0aW0iLCB+ImQnIiwgIH4iYyIsCiAgIldvcmRzIiwgbWVhbihleHAxX19mdWxsX2RhdGEkZXhwMV9fd29yZF9kX3ByaW1lKSwgbWVhbihleHAxX19mdWxsX2RhdGEkd29yZF9jKSwKICAiUGljdHVyZXMiLCBtZWFuKGV4cDFfX2Z1bGxfZGF0YSRleHAxX19waWNfZF9wcmltZSksIG1lYW4oZXhwMV9fZnVsbF9kYXRhJHBpY19jKSwKICAiUkZHIiwgZXhwMV9fcmZnX2RwcmltZSwgZXhwMV9fcmZnX2MsCiAgIlJGQkciLCBleHAxX19yZmJnX2RwcmltZSwgZXhwMV9fcmZiZ19jLAogICJSRi1SYXRpbmdzIiwgZXhwMV9fcmZyX2RwcmltZSwgZXhwMV9fcmZyX2MpICU+JQogIG11dGF0ZV9pZihpcy5udW1lcmljLCByb3VuZCwgMikgJT4lCiAgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJTdGltIikKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBBbmFseXNpcyAtIFByb3AgUmVjIGhpdHMgQU5PVkE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9fcmVjX2hpdF9hbm92YV9kYXRhIDwtIGV4cDFfX2Z1bGxfZGF0YSAlPiUKICBzZWxlY3QoaWQsIFJlc3BvbnNlT3B0aW9uLCB0b3RhbF9wcm9wX3BpY19oaXRfcmVjLCB0b3RhbF9wcm9wX3dvcmRfaGl0X3JlYykgJT4lCiAgcmVuYW1lKHBpY3R1cmUgPSAidG90YWxfcHJvcF9waWNfaGl0X3JlYyIsIHdvcmQgPSAidG90YWxfcHJvcF93b3JkX2hpdF9yZWMiKSAlPiUKICBnYXRoZXIoa2V5ID0gIlN0aW11bGlGb3JtYXQiLCB2YWx1ZSA9ICJyZWNfaGl0IiwgcGljdHVyZSwgd29yZCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJwaWN0dXJlIiwgIlBpY3R1cmVzIikpICU+JQogIHRyYW5zZm9ybShTdGltdWxpRm9ybWF0ID0gZmFjdG9yKFN0aW11bGlGb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIlBpY3R1cmVzIikpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwgIlJGX1JhdGluZ3MiKSkpCgojIyAgMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdCA8LSBhb3ZfZXooImlkIiwgInJlY19oaXQiLCBleHAxX19yZWNfaGl0X2Fub3ZhX2RhdGEsIGJldHdlZW4gPSAiUmVzcG9uc2VPcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhpbiA9ICJTdGltdWxpRm9ybWF0IikKCiMjICBQb3N0LWhvYyBjb250cmFzdHM6CiMjICBTdGltdWxpLWZvcm1hdDoKZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X3N0aW1fZm9ybWF0X21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdCwgfiBTdGltdWxpRm9ybWF0KQpleHAxX19hbm92YV9wcm9wX3JlY19oaXRfc3RpbV9mb3JtYXRfcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X3N0aW1fZm9ybWF0X21tZWFucykKCiMjICBSZXNwb25zZS1vcHRpb25zOgpleHAxX19hbm92YV9wcm9wX3JlY19oaXRfcmVzcF9vcHRpb25fbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0LCB+IFJlc3BvbnNlT3B0aW9uKQpleHAxX19hbm92YV9wcm9wX3JlY19oaXRfcmVzcF9vcHRpb25fcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X3Jlc3Bfb3B0aW9uX21tZWFucykKCiMjICBJbnRlcmFjdGlvbjogCmV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX3JlY19oaXQsIGMoIlJlc3BvbnNlT3B0aW9uIiwgIlN0aW11bGlGb3JtYXQiKSkKZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3Jlc3BvcHRpb24gPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX3JlY19oaXQsICJSZXNwb25zZU9wdGlvbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAiU3RpbXVsaUZvcm1hdCIpCmV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uIDwtIAogIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uKQpleHAxX19hbm92YV9wcm9wX3JlY19oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2Vfc3RpbWZvcm1hdCA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdCwgIlN0aW11bGlGb3JtYXQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIlJlc3BvbnNlT3B0aW9uIikKZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQgPC0gCiAgcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQpCgojIyAgUHJlcCBkYXRhIGZvciBmaWd1cmVzOiAgCmV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGEgPC0gYXMudGliYmxlKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMpICU+JSAKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKCiMjICBJbnRlcmFjdGlvbiBmaWd1cmU6CiMjICBMYWJlbHMgKHJlcGxhY2VzIHBsb3QgbGVnZW5kKToKZXhwMV9fcmVjX2hpdF9pbnRlcmFjdGlvbl9maWd1cmVfbGFiZWxzIDwtIGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGEgJT4lCiAgc2VsZWN0KFN0aW11bGlGb3JtYXQsIFJlc3BvbnNlT3B0aW9uLCBlbW1lYW4pICU+JQogIGZpbHRlcihTdGltdWxpRm9ybWF0ID09ICJQaWN0dXJlcyIpICU+JQogIG11dGF0ZShsYWJlbCA9IGNhc2Vfd2hlbigKICAgIFJlc3BvbnNlT3B0aW9uID09ICJSRkciIH4gIlJGRyIsCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZCRyIgfiAiUkZCRyIsCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZfUmF0aW5ncyIgfiAiUkYgUmF0aW5ncyIpKSAlPiUKICBncm91cF9ieShTdGltdWxpRm9ybWF0LCBSZXNwb25zZU9wdGlvbiwgbGFiZWwpICU+JQogIG11dGF0ZShlbW1lYW49cmVwbGFjZShlbW1lYW4sIFJlc3BvbnNlT3B0aW9uPT0iUkZHIiwgMC42MikpICU+JQogIG11dGF0ZShlbW1lYW49cmVwbGFjZShlbW1lYW4sIFJlc3BvbnNlT3B0aW9uPT0iUkZCRyIsIDAuNDEpKQoKIyMgIEZpZ3VyZToKZXhwMV9fcmVjX2hpdF9pbnRlcmFjdGlvbl9maWd1cmUgPC0gZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YSAlPiUKICBnZ3Bsb3QoKSArCiAgYWVzKHggPSBTdGltdWxpRm9ybWF0LCBjb2xvciA9IFJlc3BvbnNlT3B0aW9uLCBncm91cCA9IFJlc3BvbnNlT3B0aW9uLCB5ID0gZW1tZWFuKSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55ID0gbWVhbiwgZ2VvbSA9ICJwb2ludCIsIHNpemUgPSAyLjQsIHNoYXBlID0gMTUpICsKICBzdGF0X3N1bW1hcnkoZnVuLnkgPSBtZWFuLCBnZW9tID0gImxpbmUiLCBzaXplID0gMS4yKSArCiAgZ2VvbV90ZXh0KHNpemUgPSA0LCBhZXMobGFiZWwgPSBsYWJlbCwgY29sb3IgPSBSZXNwb25zZU9wdGlvbiksIG51ZGdlX3ggPSAwLjA4LCBoanVzdCA9IDAsCiAgICAgICAgICAgIGRhdGEgPSBleHAxX19yZWNfaGl0X2ludGVyYWN0aW9uX2ZpZ3VyZV9sYWJlbHMpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygnIzhlYzZjNScsICcjN2Q5YWI1JywgJyM4NTY2YWEnKSkgKwogIGxhYnMoeCA9ICJTdGltdWxpLWZvcm1hdCIsIHkgPSAiTWVhbiBwcm9wb3J0aW9uIG9mIGhpdHMgYXNzaWduZWQ6ICAnUmVjb2xsZWN0aW9uJyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygwLCAwLjEwLCAwLjIwLCAwLjMwLCAwLjQwLCAwLjUwLCAwLjYwLCAwLjcwLCAwLjgwLCAwLjkwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIHZqdXN0ID0gLTQpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgdmp1c3QgPSA2KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsIGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKDIwLCAyMCwgMjQsIDMwKSkKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgQW5hbHlzaXMgLSBQcm9wIEZhbSBoaXRzIEFOT1ZBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDFfX2ZhbV9oaXRfYW5vdmFfZGF0YSA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgc2VsZWN0KGlkLCBSZXNwb25zZU9wdGlvbiwgdG90YWxfcHJvcF9waWNfaGl0X2ZhbSwgdG90YWxfcHJvcF93b3JkX2hpdF9mYW0pICU+JQogIHJlbmFtZShwaWN0dXJlID0gInRvdGFsX3Byb3BfcGljX2hpdF9mYW0iLCB3b3JkID0gInRvdGFsX3Byb3Bfd29yZF9oaXRfZmFtIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAiZmFtX2hpdCIsIHBpY3R1cmUsIHdvcmQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfYXQodmFycygiaWQiLCAiUmVzcG9uc2VPcHRpb24iLCAiU3RpbXVsaUZvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShTdGltdWxpRm9ybWF0ID0gc3RyX3JlcGxhY2UoU3RpbXVsaUZvcm1hdCwgIndvcmQiLCAiV29yZHMiKSkgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAicGljdHVyZSIsICJQaWN0dXJlcyIpKSAlPiUKICB0cmFuc2Zvcm0oU3RpbXVsaUZvcm1hdCA9IGZhY3RvcihTdGltdWxpRm9ybWF0LCBsZXZlbHM9YygiV29yZHMiLCJQaWN0dXJlcyIpKSkgJT4lCiAgdHJhbnNmb3JtKFJlc3BvbnNlT3B0aW9uID0gZmFjdG9yKFJlc3BvbnNlT3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIsICJSRl9SYXRpbmdzIikpKQoKIyMgIDItd2F5IG1peGVkIEFOT1ZBOgpleHAxX19hbm92YV9wcm9wX2ZhbV9oaXQgPC0gYW92X2V6KCJpZCIsICJmYW1faGl0IiwgZXhwMV9fZmFtX2hpdF9hbm92YV9kYXRhLCBiZXR3ZWVuID0gIlJlc3BvbnNlT3B0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gPSAiU3RpbXVsaUZvcm1hdCIpCgojIyAgUG9zdC1ob2MgY29udHJhc3RzOgojIyAgU3RpbXVsaS1mb3JtYXQ6CmV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2ZhbV9oaXQsIH4gU3RpbXVsaUZvcm1hdCkKZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlIDwtIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMpCgojIyAgUmVzcG9uc2Utb3B0aW9uczoKZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdCwgfiBSZXNwb25zZU9wdGlvbikKZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlIDwtIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMpCgojIyAgSW50ZXJhY3Rpb246IApleHAxX19hbm92YV9wcm9wX2ZhbV9oaXRfaW50ZXJhY3Rpb25fbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0LCBjKCJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IikpCmV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0LCAiUmVzcG9uc2VPcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIlN0aW11bGlGb3JtYXQiKQpleHAxX19hbm92YV9wcm9wX2ZhbV9oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbiA8LSAKICBwYWlycyhleHAxX19hbm92YV9wcm9wX2ZhbV9oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbikKZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2ZhbV9oaXQsICJTdGltdWxpRm9ybWF0IiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJSZXNwb25zZU9wdGlvbiIpCmV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9zdGltZm9ybWF0IDwtIAogIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9zdGltZm9ybWF0KQoKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlczogIApleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhIDwtIGFzLnRpYmJsZShleHAxX19hbm92YV9wcm9wX2ZhbV9oaXRfaW50ZXJhY3Rpb25fbW1lYW5zKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKCiMjICBJbnRlcmFjdGlvbiBmaWd1cmU6CiMjICBMYWJlbHMgKHJlcGxhY2VzIHBsb3QgbGVnZW5kKToKZXhwMV9fZmFtX2hpdF9pbnRlcmFjdGlvbl9maWd1cmVfbGFiZWxzIDwtIGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGEgJT4lCiAgc2VsZWN0KFN0aW11bGlGb3JtYXQsIFJlc3BvbnNlT3B0aW9uLCBlbW1lYW4pICU+JQogIGZpbHRlcihTdGltdWxpRm9ybWF0ID09ICJQaWN0dXJlcyIpICU+JQogIG11dGF0ZShsYWJlbCA9IGNhc2Vfd2hlbigKICAgIFJlc3BvbnNlT3B0aW9uID09ICJSRkciIH4gIlJGRyIsCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZCRyIgfiAiUkZCRyIsCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZfUmF0aW5ncyIgfiAiUkYgUmF0aW5ncyIpKSAlPiUKICBncm91cF9ieShTdGltdWxpRm9ybWF0LCBSZXNwb25zZU9wdGlvbiwgbGFiZWwpCgojIyAgRmlndXJlOgpleHAxX19mYW1faGl0X2ludGVyYWN0aW9uX2ZpZ3VyZSA8LSBleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhICU+JQogIGdncGxvdCgpICsKICBhZXMoeCA9IFN0aW11bGlGb3JtYXQsIGNvbG9yID0gUmVzcG9uc2VPcHRpb24sIGdyb3VwID0gUmVzcG9uc2VPcHRpb24sIHkgPSBlbW1lYW4pICsKICBzdGF0X3N1bW1hcnkoZnVuLnkgPSBtZWFuLCBnZW9tID0gInBvaW50Iiwgc2l6ZSA9IDIuNCwgc2hhcGUgPSAxNSkgKwogIHN0YXRfc3VtbWFyeShmdW4ueSA9IG1lYW4sIGdlb20gPSAibGluZSIsIHNpemUgPSAxLjIpICsKICBnZW9tX3RleHQoc2l6ZSA9IDQsIGFlcyhsYWJlbCA9IGxhYmVsLCBjb2xvciA9IFJlc3BvbnNlT3B0aW9uKSwgbnVkZ2VfeCA9IDAuMDgsIGhqdXN0ID0gMCwKICAgICAgICAgICAgZGF0YSA9IGV4cDFfX2ZhbV9oaXRfaW50ZXJhY3Rpb25fZmlndXJlX2xhYmVscykgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCcjOGVjNmM1JywgJyM3ZDlhYjUnLCAnIzg1NjZhYScpKSArCiAgbGFicyh4ID0gIlN0aW11bGktZm9ybWF0IiwgeSA9ICJNZWFuIHByb3BvcnRpb24gb2YgaGl0cyBhc3NpZ25lZDogICdGYW1pbGlhcml0eSciKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMCwgMC4xMCwgMC4yMCwgMC4zMCwgMC40MCwgMC41MCwgMC42MCwgMC43MCwgMC44MCwgMC45MCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCB2anVzdCA9IC00KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIHZqdXN0ID0gNiksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3Qoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBwbG90Lm1hcmdpbiA9IG1hcmdpbigyMCwgMjAsIDI0LCAzMCkpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIEFuYWx5c2lzIC0gUHJvcCBHdWVzcyBoaXRzIEFOT1ZBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAxX19ndWVzc19oaXRfYW5vdmFfZGF0YSA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgc2VsZWN0KGlkLCBSZXNwb25zZU9wdGlvbiwgcHJvcF9waWNfaGl0X2d1ZXNzLCBwcm9wX3dvcmRfaGl0X2d1ZXNzKSAlPiUKICByZW5hbWUocGljdHVyZSA9ICJwcm9wX3BpY19oaXRfZ3Vlc3MiLCB3b3JkID0gInByb3Bfd29yZF9oaXRfZ3Vlc3MiKSAlPiUKICBnYXRoZXIoa2V5ID0gIlN0aW11bGlGb3JtYXQiLCB2YWx1ZSA9ICJndWVzc19oaXQiLCBwaWN0dXJlLCB3b3JkKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgIlJlc3BvbnNlT3B0aW9uIiwgIlN0aW11bGlGb3JtYXQiKSwgZmFjdG9yKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJ3b3JkIiwgIldvcmRzIikpICU+JQogIG11dGF0ZShTdGltdWxpRm9ybWF0ID0gc3RyX3JlcGxhY2UoU3RpbXVsaUZvcm1hdCwgInBpY3R1cmUiLCAiUGljdHVyZXMiKSkgJT4lCiAgdHJhbnNmb3JtKFN0aW11bGlGb3JtYXQgPSBmYWN0b3IoU3RpbXVsaUZvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiUGljdHVyZXMiKSkpICU+JQogIHRyYW5zZm9ybShSZXNwb25zZU9wdGlvbiA9IGZhY3RvcihSZXNwb25zZU9wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciLCAiUkZfUmF0aW5ncyIpKSkKCiMjICAyLXdheSBtaXhlZCBBTk9WQToKZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19oaXQgPC0gYW92X2V6KCJpZCIsICJndWVzc19oaXQiLCBleHAxX19ndWVzc19oaXRfYW5vdmFfZGF0YSwgYmV0d2VlbiA9ICJSZXNwb25zZU9wdGlvbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoaW4gPSAiU3RpbXVsaUZvcm1hdCIpCgojIyAgUG9zdC1ob2MgY29udHJhc3RzOgojIyAgU3RpbXVsaS1mb3JtYXQ6CmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0LCB+IFN0aW11bGlGb3JtYXQpCmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlIDwtIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X21tZWFucykKCiMjICBSZXNwb25zZS1vcHRpb25zOgpleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdCwgfiBSZXNwb25zZU9wdGlvbikKZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fbW1lYW5zKQoKIyMgIEludGVyYWN0aW9uIChub3Qgc2lnbmlmaWNhbnQsIGJ1dCB1c2VkIGluIGJhciBjaGFydCk6CmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjKCJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IikpCmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3Jlc3BvcHRpb24gPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdCwgIlJlc3BvbnNlT3B0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5ID0gIlN0aW11bGlGb3JtYXQiKQpleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uIDwtIAogIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3Jlc3BvcHRpb24pCmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdCwgIlN0aW11bGlGb3JtYXQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAiUmVzcG9uc2VPcHRpb24iKQpleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9zdGltZm9ybWF0IDwtIAogIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQpCgojIyAgUHJlcCBkYXRhIGZvciBmaWd1cmVzOiAgCmV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YSA8LSBhcy50aWJibGUoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19oaXRfaW50ZXJhY3Rpb25fbW1lYW5zKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKCiMjICBJbnRlcmFjdGlvbiBmaWd1cmU6CiMjICBMYWJlbHMgKHJlcGxhY2VzIHBsb3QgbGVnZW5kKToKZXhwMV9fZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX2ZpZ3VyZV9sYWJlbHMgPC0gZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhICU+JQogIHNlbGVjdChTdGltdWxpRm9ybWF0LCBSZXNwb25zZU9wdGlvbiwgZW1tZWFuKSAlPiUKICBmaWx0ZXIoU3RpbXVsaUZvcm1hdCA9PSAiUGljdHVyZXMiKSAlPiUKICBtdXRhdGUobGFiZWwgPSBjYXNlX3doZW4oCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZHIiB+ICJSRkciLAogICAgUmVzcG9uc2VPcHRpb24gPT0gIlJGQkciIH4gIlJGQkciLAogICAgUmVzcG9uc2VPcHRpb24gPT0gIlJGX1JhdGluZ3MiIH4gIlJGIFJhdGluZ3MiKSkgJT4lCiAgZ3JvdXBfYnkoU3RpbXVsaUZvcm1hdCwgUmVzcG9uc2VPcHRpb24sIGxhYmVsKQoKIyMgIEZpZ3VyZToKZXhwMV9fZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX2ZpZ3VyZSA8LSBleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGEgJT4lCiAgZ2dwbG90KCkgKwogIGFlcyh4ID0gU3RpbXVsaUZvcm1hdCwgY29sb3IgPSBSZXNwb25zZU9wdGlvbiwgZ3JvdXAgPSBSZXNwb25zZU9wdGlvbiwgeSA9IGVtbWVhbikgKwogIHN0YXRfc3VtbWFyeShmdW4ueSA9IG1lYW4sIGdlb20gPSAicG9pbnQiLCBzaXplID0gMi40LCBzaGFwZSA9IDE1KSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55ID0gbWVhbiwgZ2VvbSA9ICJsaW5lIiwgc2l6ZSA9IDEuMikgKwogIGdlb21fdGV4dChzaXplID0gNCwgYWVzKGxhYmVsID0gbGFiZWwsIGNvbG9yID0gUmVzcG9uc2VPcHRpb24pLCBudWRnZV94ID0gMC4wOCwgaGp1c3QgPSAwLAogICAgICAgICAgICBkYXRhID0gZXhwMV9fZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX2ZpZ3VyZV9sYWJlbHMpICsKICBzY2FsZV9jb2xvcl9tYW51YWwodmFsdWVzID0gYygnIzhlYzZjNScsICcjN2Q5YWI1JywgJyM4NTY2YWEnKSkgKwogIGxhYnMoeCA9ICJTdGltdWxpLWZvcm1hdCIsIHkgPSAiTWVhbiBwcm9wb3J0aW9uIG9mIGhpdHMgYXNzaWduZWQ6ICAnR3Vlc3NpbmcnIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDAuMTAsIDAuMjAsIDAuMzAsIDAuNDAsIDAuNTAsIDAuNjAsIDAuNzAsIDAuODAsIDAuOTAsIDEpLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgdmp1c3QgPSAtNCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCB2anVzdCA9IDYpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywgY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4oMjAsIDIwLCAyNCwgMzApKQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgSGl0cyBmaWd1cmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9faGl0X2ZpZ3VyZV9kYXRhIDwtIHRyaWJibGUoCiAgfiJSZXNwb25zZU9wdGlvbiIsIH4iU3RpbXVsaUZvcm1hdCIsIH4icmZnIiwgfiJlbW1lYW4iLCB+IlNFIiwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzEsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YVsxLDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGFbMSwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzEsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzIsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YVsyLDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGFbMiwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzIsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzMsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YVszLDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGFbMywzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzMsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzQsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YVs0LDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGFbNCwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzQsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzUsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YVs1LDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGFbNSwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzUsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzYsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX2hpdF9maWd1cmVfZGF0YVs2LDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19oaXRfZmlndXJlX2RhdGFbNiwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfaGl0X2ZpZ3VyZV9kYXRhWzYsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzEsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVsxLDJdKSksICJGYW1pbGlhcml0eSIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVsxLDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbMSw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbMiwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzIsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICBhcy5kb3VibGUocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzIsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVsyLDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVszLDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbMywyXSkpLCAiRmFtaWxpYXJpdHkiLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbMywzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzMsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzQsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVs0LDJdKSksICJGYW1pbGlhcml0eSIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVs0LDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbNCw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbNSwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzUsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICBhcy5kb3VibGUocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzUsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVs1LDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX2hpdF9maWd1cmVfZGF0YVs2LDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbNiwyXSkpLCAiRmFtaWxpYXJpdHkiLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9oaXRfZmlndXJlX2RhdGFbNiwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19mYW1faGl0X2ZpZ3VyZV9kYXRhWzYsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbMSwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbMSwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVsxLDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVsxLDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzIsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzIsMl0pKSwgIkd1ZXNzaW5nIiwKICBhcy5kb3VibGUocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbMiwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbMiw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVszLDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVszLDJdKSksICJHdWVzc2luZyIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzMsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzMsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbNCwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbNCwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVs0LDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVs0LDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzUsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzUsMl0pKSwgIkd1ZXNzaW5nIiwKICBhcy5kb3VibGUocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbNSwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19ndWVzc19oaXRfZmlndXJlX2RhdGFbNSw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVs2LDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX2hpdF9maWd1cmVfZGF0YVs2LDJdKSksICJHdWVzc2luZyIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzYsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfaGl0X2ZpZ3VyZV9kYXRhWzYsNF0pKSkgJT4lCiAgdHJhbnNmb3JtKFJlc3BvbnNlT3B0aW9uID0gZmFjdG9yKFJlc3BvbnNlT3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIsIlJGX1JhdGluZ3MiKSkpICU+JQogIHRyYW5zZm9ybShyZmcgPSBmYWN0b3IocmZnLCBsZXZlbHM9YygiUmVjb2xsZWN0aW9uIiwiRmFtaWxpYXJpdHkiLCJHdWVzc2luZyIpKSkgJT4lCiAgdHJhbnNmb3JtKFN0aW11bGlGb3JtYXQgPSBmYWN0b3IoU3RpbXVsaUZvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiUGljdHVyZXMiKSkpCgpleHAxX19oaXRfZmlndXJlIDwtIGdncGxvdChleHAxX19oaXRfZmlndXJlX2RhdGEsIGFlcyh4ID0gU3RpbXVsaUZvcm1hdCwgeSA9IGVtbWVhbiwgZmlsbCA9IHJmZykpICsKICBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiUmVjb2xsZWN0aW9uIiA9ICIjMUI0MjUxIiwgIkZhbWlsaWFyaXR5IiA9ICIjNkE2QzkzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkd1ZXNzaW5nIiA9ICIjRDQ5MUNBIikpICsgCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHBtYXgoZW1tZWFuLVNFLCAwKSwgeW1heCA9IGVtbWVhbitTRSksIHdpZHRoID0gMC4yLCBzaXplID0gMC4zLCAKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSkgKwogIGZhY2V0X3dyYXAoflJlc3BvbnNlT3B0aW9uLCBzdHJpcC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gIlJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb24iLCB5ID0gIk1lYW4gcHJvcG9ydGlvbiBvZiBoaXRzIikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApLCBsaW1pdHMgPSBjKDAsIDEpKSArCiAgdGhlbWVfY2xhc3NpYygpICsgICAgIyBSZW1vdmVzIGdyZXkgYmFja2dyb3VuZCBhbmQgZ3JpZCBsaW5lcy4gCiAgdGhlbWUoCiAgICBzdHJpcC5wbGFjZW1lbnQgPSAib3V0c2lkZSIsCiAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIsIGNvbG91ciA9ICJibGFjayIpLAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHZqdXN0PS00KSwgICAgIyBNb3ZlIHgtYXhpcyBsYWJlbCBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgZmlndXJlLgogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHZqdXN0PTYpLCAgICAgIyBNb3ZlIHktYXhpcyBsYWJlbCBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgZmlndXJlLgogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLAogICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIHNpemUgPSAwLjIsIGxpbmV0eXBlID0gInNvbGlkIiwgY29sb3VyID0gImJsYWNrIiksCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSBjKDAuNSwgMC44OTYpLAogICAgbGVnZW5kLm1hcmdpbiA9IG1hcmdpbig2LCA2LCA2LCA2KSwKICAgIGxlZ2VuZC5zcGFjaW5nLnkgPSB1bml0KC0xLCAicHQiKSwKICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsIGNvbG91ciA9ICJibGFjayIpLAogICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4oMjAsIDIwLCAyNCwgMzApKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBBbmFseXNpcyAtIFByb3AgUmVjIEZBIEFOT1ZBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIHNlbGVjdChpZCwgUmVzcG9uc2VPcHRpb24sIHRvdGFsX3Byb3BfcGljX0ZBX3JlYywgdG90YWxfcHJvcF93b3JkX0ZBX3JlYykgJT4lCiAgcmVuYW1lKHBpY3R1cmUgPSAidG90YWxfcHJvcF9waWNfRkFfcmVjIiwgd29yZCA9ICJ0b3RhbF9wcm9wX3dvcmRfRkFfcmVjIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAicmVjX0ZBIiwgcGljdHVyZSwgd29yZCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJwaWN0dXJlIiwgIlBpY3R1cmVzIikpICU+JQogIHRyYW5zZm9ybShTdGltdWxpRm9ybWF0ID0gZmFjdG9yKFN0aW11bGlGb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIlBpY3R1cmVzIikpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwgIlJGX1JhdGluZ3MiKSkpCgojIyAgMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBIDwtIGFvdl9leigiaWQiLCAicmVjX0ZBIiwgZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkEsIGJldHdlZW4gPSAiUmVzcG9uc2VPcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluID0gIlN0aW11bGlGb3JtYXQiKQoKIyMgIFBvc3QtaG9jIGNvbnRyYXN0czoKIyMgIFJlc3BvbnNlLW9wdGlvbnM6CmV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX3Jlc3Bfb3B0aW9uX21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBLCB+IFJlc3BvbnNlT3B0aW9uKQpleHAxX19hbm92YV9wcm9wX3JlY19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSA8LSBwYWlycyhleHAxX19hbm92YV9wcm9wX3JlY19GQV9yZXNwX29wdGlvbl9tbWVhbnMpCgojIyAgSW50ZXJhY3Rpb246CmV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX2ludGVyYWN0aW9uX21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBLCBjKCJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IikpCmV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX2ludGVyYWN0aW9uX3BhaXJ3aXNlIDwtIHBhaXJzKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX2ludGVyYWN0aW9uX21tZWFucykKZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkFfaW50ZXJhY3Rpb25fbW1lYW5zIDwtIGVtbWVhbnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkEsIGMoIlJlc3BvbnNlT3B0aW9uIiwgIlN0aW11bGlGb3JtYXQiKSkKZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkFfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbiA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBLCAiUmVzcG9uc2VPcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPSAiU3RpbXVsaUZvcm1hdCIpCmV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX2ludGVyYWN0aW9uX3BhaXJ3aXNlX3Jlc3BvcHRpb24gPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkFfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbikKZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkFfaW50ZXJhY3Rpb25fcGFpcndpc2Vfc3RpbWZvcm1hdCA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBLCAiU3RpbXVsaUZvcm1hdCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSA9ICJSZXNwb25zZU9wdGlvbiIpCmV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9yZWNfRkFfaW50ZXJhY3Rpb25fcGFpcndpc2Vfc3RpbWZvcm1hdCkKCiMjICBQcmVwIGRhdGEgZm9yIGZpZ3VyZXM6ICAKZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhIDwtIGFzLnRpYmJsZShleHAxX19hbm92YV9wcm9wX3JlY19GQV9pbnRlcmFjdGlvbl9tbWVhbnMpICU+JQogIHNlbGVjdCgtZGYsIC1sb3dlci5DTCwgLXVwcGVyLkNMKQoKIyMgIExhYmVscyAocmVwbGFjZXMgcGxvdCBsZWdlbmQpOgpleHAxX19yZWNfRkFfaW50ZXJhY3Rpb25fZmlndXJlX2xhYmVscyA8LSBleHAxX19yZWNfRkFfZmlndXJlX2RhdGEgJT4lCiAgc2VsZWN0KFN0aW11bGlGb3JtYXQsIFJlc3BvbnNlT3B0aW9uLCBlbW1lYW4pICU+JQogIGZpbHRlcihTdGltdWxpRm9ybWF0ID09ICJQaWN0dXJlcyIpICU+JQogIG11dGF0ZShsYWJlbCA9IGNhc2Vfd2hlbigKICAgIFJlc3BvbnNlT3B0aW9uID09ICJSRkciIH4gIlJGRyIsCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZCRyIgfiAiUkZCRyIsCiAgICBSZXNwb25zZU9wdGlvbiA9PSAiUkZfUmF0aW5ncyIgfiAiUkYgUmF0aW5ncyIpKSAlPiUKICBncm91cF9ieShTdGltdWxpRm9ybWF0LCBSZXNwb25zZU9wdGlvbiwgbGFiZWwpICU+JQogIG11dGF0ZShlbW1lYW49cmVwbGFjZShlbW1lYW4sIFJlc3BvbnNlT3B0aW9uPT0iUkZHIiwgMC4xMykpICU+JQogIG11dGF0ZShlbW1lYW49cmVwbGFjZShlbW1lYW4sIFJlc3BvbnNlT3B0aW9uPT0iUkZCRyIsIDAuMTYpKSAlPiUKICBtdXRhdGUoZW1tZWFuPXJlcGxhY2UoZW1tZWFuLCBSZXNwb25zZU9wdGlvbj09IlJGIFJhdGluZ3MiLCAwLjIpKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBBbmFseXNpcyAtIFByb3AgRmFtIEZBIEFOT1ZBOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9fYW5vdmFfcHJvcF9mYW1fRkEgPC0gZXhwMV9fZnVsbF9kYXRhICU+JQogIHNlbGVjdChpZCwgUmVzcG9uc2VPcHRpb24sIHRvdGFsX3Byb3BfcGljX0ZBX2ZhbSwgdG90YWxfcHJvcF93b3JkX0ZBX2ZhbSkgJT4lCiAgcmVuYW1lKHBpY3R1cmUgPSAidG90YWxfcHJvcF9waWNfRkFfZmFtIiwgd29yZCA9ICJ0b3RhbF9wcm9wX3dvcmRfRkFfZmFtIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJTdGltdWxpRm9ybWF0IiwgdmFsdWUgPSAiZmFtX0ZBIiwgcGljdHVyZSwgd29yZCkgJT4lCiAgdW5ncm91cCgpICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoU3RpbXVsaUZvcm1hdCA9IHN0cl9yZXBsYWNlKFN0aW11bGlGb3JtYXQsICJwaWN0dXJlIiwgIlBpY3R1cmVzIikpICU+JQogIHRyYW5zZm9ybShTdGltdWxpRm9ybWF0ID0gZmFjdG9yKFN0aW11bGlGb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIlBpY3R1cmVzIikpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwgIlJGX1JhdGluZ3MiKSkpCgojIyAgMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDFfX2Fub3ZhX3Byb3BfZmFtX0ZBIDwtIGFvdl9leigiaWQiLCAiZmFtX0ZBIiwgZXhwMV9fYW5vdmFfcHJvcF9mYW1fRkEsIGJldHdlZW4gPSAiUmVzcG9uc2VPcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluID0gIlN0aW11bGlGb3JtYXQiKQoKIyMgIEludGVyYWN0aW9uOgpleHAxX19hbm92YV9wcm9wX2ZhbV9GQV9pbnRlcmFjdGlvbl9tbWVhbnMgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2ZhbV9GQSwgYygiUmVzcG9uc2VPcHRpb24iLCAiU3RpbXVsaUZvcm1hdCIpKQpleHAxX19hbm92YV9wcm9wX2ZhbV9GQV9pbnRlcmFjdGlvbl9wYWlyd2lzZSA8LSBwYWlycyhleHAxX19hbm92YV9wcm9wX2ZhbV9GQV9pbnRlcmFjdGlvbl9tbWVhbnMpCgojIyAgUHJlcCBkYXRhIGZvciBmaWd1cmVzOiAgCmV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YSA8LSBhcy50aWJibGUoZXhwMV9fYW5vdmFfcHJvcF9mYW1fRkFfaW50ZXJhY3Rpb25fbW1lYW5zKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBBbmFseXNpcyAtIFByb3AgR3Vlc3MgRkEgQU5PVkE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQSA8LSBleHAxX19mdWxsX2RhdGEgJT4lCiAgc2VsZWN0KGlkLCBSZXNwb25zZU9wdGlvbiwgcHJvcF9waWNfRkFfZ3Vlc3MsIHByb3Bfd29yZF9GQV9ndWVzcykgJT4lCiAgcmVuYW1lKHBpY3R1cmUgPSAicHJvcF9waWNfRkFfZ3Vlc3MiLCB3b3JkID0gInByb3Bfd29yZF9GQV9ndWVzcyIpICU+JSAKICBnYXRoZXIoa2V5ID0gIlN0aW11bGlGb3JtYXQiLCB2YWx1ZSA9ICJndWVzc19GQSIsIHBpY3R1cmUsIHdvcmQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGVfYXQodmFycygiaWQiLCAiUmVzcG9uc2VPcHRpb24iLCAiU3RpbXVsaUZvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShTdGltdWxpRm9ybWF0ID0gc3RyX3JlcGxhY2UoU3RpbXVsaUZvcm1hdCwgIndvcmQiLCAiV29yZHMiKSkgJT4lCiAgbXV0YXRlKFN0aW11bGlGb3JtYXQgPSBzdHJfcmVwbGFjZShTdGltdWxpRm9ybWF0LCAicGljdHVyZSIsICJQaWN0dXJlcyIpKSAlPiUKICB0cmFuc2Zvcm0oU3RpbXVsaUZvcm1hdCA9IGZhY3RvcihTdGltdWxpRm9ybWF0LCBsZXZlbHM9YygiV29yZHMiLCJQaWN0dXJlcyIpKSkgJT4lCiAgdHJhbnNmb3JtKFJlc3BvbnNlT3B0aW9uID0gZmFjdG9yKFJlc3BvbnNlT3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIsICJSRl9SYXRpbmdzIikpKSAKCiMjICAyLXdheSBtaXhlZCBBTk9WQToKZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQSA8LSBhb3ZfZXooImlkIiwgImd1ZXNzX0ZBIiwgZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQSwgYmV0d2VlbiA9ICJSZXNwb25zZU9wdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluID0gIlN0aW11bGlGb3JtYXQiKQojIyAgUG9zdC1ob2MgY29udHJhc3RzOgojIyAgUmVzcG9uc2Utb3B0aW9uOgpleHAxX19hbm92YV9wcm9wX2d1ZXNzX0ZBX3Jlc3Bfb3B0aW9uX21tZWFucyA8LSBlbW1lYW5zKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfRkEsIH4gUmVzcG9uc2VPcHRpb24pCmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfcmVzcF9vcHRpb25fcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQV9yZXNwX29wdGlvbl9tbWVhbnMpCiMjICBJbnRlcmFjdGlvbjoKZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQV9pbnRlcmFjdGlvbl9tbWVhbnMgPC0gZW1tZWFucyhleHAxX19hbm92YV9wcm9wX2d1ZXNzX0ZBLCBjKCJSZXNwb25zZU9wdGlvbiIsICJTdGltdWxpRm9ybWF0IikpCmV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfaW50ZXJhY3Rpb25fcGFpcndpc2UgPC0gcGFpcnMoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQV9pbnRlcmFjdGlvbl9tbWVhbnMpCiMjICBQcmVwIGRhdGEgZm9yIGZpZ3VyZXM6ICAKZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGEgPC0gYXMudGliYmxlKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfaW50ZXJhY3Rpb25fbW1lYW5zKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBGQSBmaWd1cmU6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwMV9fRkFfZmlndXJlX2RhdGEgPC0gdHJpYmJsZSgKICB+IlJlc3BvbnNlT3B0aW9uIiwgfiJTdGltdWxpRm9ybWF0IiwgfiJyZmciLCB+ImVtbWVhbiIsIH4iU0UiLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVsxLDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVsxLDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVsxLDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVsxLDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzIsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzIsMl0pKSwgIlJlY29sbGVjdGlvbiIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzIsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzIsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbMywxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbMywyXSkpLCAiUmVjb2xsZWN0aW9uIiwKICBhcy5kb3VibGUocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbMywzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbMyw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVs0LDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVs0LDJdKSksICJSZWNvbGxlY3Rpb24iLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVs0LDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX3JlY19GQV9maWd1cmVfZGF0YVs0LDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzUsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzUsMl0pKSwgIlJlY29sbGVjdGlvbiIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzUsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fcmVjX0ZBX2ZpZ3VyZV9kYXRhWzUsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbNiwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbNiwyXSkpLCAiUmVjb2xsZWN0aW9uIiwKICBhcy5kb3VibGUocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbNiwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19yZWNfRkFfZmlndXJlX2RhdGFbNiw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVsxLDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVsxLDJdKSksICJGYW1pbGlhcml0eSIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzEsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzEsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbMiwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbMiwyXSkpLCAiRmFtaWxpYXJpdHkiLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVsyLDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVsyLDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzMsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzMsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICBhcy5kb3VibGUocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbMywzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbMyw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVs0LDFdKSksIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVs0LDJdKSksICJGYW1pbGlhcml0eSIsCiAgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzQsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzQsNF0pKSwKICBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbNSwxXSkpLCBhcy5jaGFyYWN0ZXIocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbNSwyXSkpLCAiRmFtaWxpYXJpdHkiLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVs1LDNdKSksIGFzLmRvdWJsZShwdWxsKGV4cDFfX2ZhbV9GQV9maWd1cmVfZGF0YVs1LDRdKSksCiAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzYsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZmFtX0ZBX2ZpZ3VyZV9kYXRhWzYsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICBhcy5kb3VibGUocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbNiwzXSkpLCBhcy5kb3VibGUocHVsbChleHAxX19mYW1fRkFfZmlndXJlX2RhdGFbNiw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzEsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbMSwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzEsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbMSw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzIsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbMiwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzIsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbMiw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzMsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbMywyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzMsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbMyw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzQsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbNCwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzQsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbNCw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzUsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbNSwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzUsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbNSw0XSkpLAogIGFzLmNoYXJhY3RlcihwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzYsMV0pKSwgYXMuY2hhcmFjdGVyKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbNiwyXSkpLCAiR3Vlc3NpbmciLAogIGFzLmRvdWJsZShwdWxsKGV4cDFfX2d1ZXNzX0ZBX2ZpZ3VyZV9kYXRhWzYsM10pKSwgYXMuZG91YmxlKHB1bGwoZXhwMV9fZ3Vlc3NfRkFfZmlndXJlX2RhdGFbNiw0XSkpKSAlPiUKICB0cmFuc2Zvcm0oUmVzcG9uc2VPcHRpb24gPSBmYWN0b3IoUmVzcG9uc2VPcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIiwiUkZfUmF0aW5ncyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJmZyA9IGZhY3RvcihyZmcsIGxldmVscz1jKCJSZWNvbGxlY3Rpb24iLCJGYW1pbGlhcml0eSIsIkd1ZXNzaW5nIikpKSAlPiUKICB0cmFuc2Zvcm0oU3RpbXVsaUZvcm1hdCA9IGZhY3RvcihTdGltdWxpRm9ybWF0LCBsZXZlbHM9YygiV29yZHMiLCJQaWN0dXJlcyIpKSkKCmV4cDFfX0ZBX2ZpZ3VyZSA8LSBnZ3Bsb3QoZXhwMV9fRkFfZmlndXJlX2RhdGEsIGFlcyh4ID0gU3RpbXVsaUZvcm1hdCwgeSA9IGVtbWVhbiwgZmlsbCA9IHJmZykpICsKICBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiUmVjb2xsZWN0aW9uIiA9ICIjMUI0MjUxIiwgIkZhbWlsaWFyaXR5IiA9ICIjNkE2QzkzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkd1ZXNzaW5nIiA9ICIjRDQ5MUNBIikpICsgCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IGVtbWVhbi1TRSwgeW1heCA9IGVtbWVhbitTRSksIHdpZHRoID0gMC4yLCBzaXplID0gMC4zLCAKICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSkgKwogIGZhY2V0X3dyYXAoflJlc3BvbnNlT3B0aW9uLCBzdHJpcC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gIlJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb24iLCB5ID0gIk1lYW4gcHJvcG9ydGlvbiBvZiBGQXMiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGV4cGFuZCA9IGMoMCwgMCksIGxpbWl0cyA9IGMoMCwgMSkpICsgCiAgdGhlbWVfY2xhc3NpYygpICsKICB0aGVtZSgKICAgIHN0cmlwLnBsYWNlbWVudCA9ICJvdXRzaWRlIiwKICAgIHN0cmlwLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIHNpemUgPSAwLjUsIGxpbmV0eXBlID0gInNvbGlkIiwgY29sb3VyID0gImJsYWNrIiksCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQodmp1c3Q9LTQpLCAgICAjIE1vdmUgeC1heGlzIGxhYmVsIGZ1cnRoZXIgYXdheSBmcm9tIHRoZSBmaWd1cmUuCiAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQodmp1c3Q9NiksICAgICAjIE1vdmUgeS1heGlzIGxhYmVsIGZ1cnRoZXIgYXdheSBmcm9tIHRoZSBmaWd1cmUuCiAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gOSksCiAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgc2l6ZSA9IDAuMiwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgIGxlZ2VuZC50aXRsZSA9IGVsZW1lbnRfYmxhbmsoKSwKICAgIGxlZ2VuZC5wb3NpdGlvbiA9IGMoMC41LCAwLjg5NiksCiAgICBsZWdlbmQubWFyZ2luID0gbWFyZ2luKDYsIDYsIDYsIDYpLAogICAgbGVnZW5kLnNwYWNpbmcueSA9IHVuaXQoLTEsICJwdCIpLAogICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywgY29sb3VyID0gImJsYWNrIiksCiAgICBwbG90Lm1hcmdpbiA9IG1hcmdpbigyMCwgMjAsIDI0LCAzMCkpCmBgYAoKIyMgTWV0aG9kCgpgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KZXhwMV9fbl9wcm9saWZpYyA8LSBucm93KGV4cDFfX2Z1bGxfZGF0YSAlPiUgZmlsdGVyKHNvdXJjZSA9PSAicGEiKSkKZXhwMV9fbl9wcm9saWZpYyA8LSByb3VuZCgoZXhwMV9fbl9wcm9saWZpYyAvIG5yb3coZXhwMV9fZnVsbF9kYXRhKSkgKiAxMDAsIDIpCmV4cDFfX25fcnB0IDwtIG5yb3coZXhwMV9fZnVsbF9kYXRhICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihzb3VyY2UgPT0gInJwdC1hIiB8IHNvdXJjZSA9PSAicnB0LWIiIHwgc291cmNlID09ICJycHQtYyIgfCBzb3VyY2UgPT0gInJwdC1kIikpCmV4cDFfX25fcnB0IDwtIHJvdW5kKChleHAxX19uX3JwdCAvIG5yb3coZXhwMV9fZnVsbF9kYXRhKSkgKiAxMDAsIDIpCmV4cDFfX25fZmFjZWJvb2sgPC0gbnJvdyhleHAxX19mdWxsX2RhdGEgJT4lIGZpbHRlcihzb3VyY2UgPT0gImZiIikpCmV4cDFfX25fZmFjZWJvb2sgPC0gcm91bmQoKGV4cDFfX25fZmFjZWJvb2sgLyBucm93KGV4cDFfX2Z1bGxfZGF0YSkpICogMTAwLCAyKQpleHAxX19uX3JlZGRpdCA8LSBucm93KGV4cDFfX2Z1bGxfZGF0YSAlPiUgZmlsdGVyKHNvdXJjZSA9PSAicmR0IikpCmV4cDFfX25fcmVkZGl0IDwtIHJvdW5kKChleHAxX19uX3JlZGRpdCAvIG5yb3coZXhwMV9fZnVsbF9kYXRhKSkgKiAxMDAsIDIpCmV4cDFfX25fYzRwIDwtIG5yb3coZXhwMV9fZnVsbF9kYXRhICU+JSBmaWx0ZXIoc291cmNlID09ICJjNHAiKSkKZXhwMV9fbl9jNHAgPC0gcm91bmQoKGV4cDFfX25fYzRwIC8gbnJvdyhleHAxX19mdWxsX2RhdGEpKSAqIDEwMCwgMikKZXhwMV9fbl91bnNwZWNpZmllZCA8LSBucm93KGV4cDFfX2Z1bGxfZGF0YSAlPiUgZmlsdGVyKHNvdXJjZSA9PSAiMCIpKQpleHAxX19uX3Vuc3BlY2lmaWVkIDwtIHJvdW5kKChleHAxX19uX3Vuc3BlY2lmaWVkIC8gbnJvdyhleHAxX19mdWxsX2RhdGEpKSAqIDEwMCwgMikKZXhwMV9fbl9lbmdfbGFuZyA8LSBucm93KGV4cDFfX2Z1bGxfZGF0YSAlPiUgZmlsdGVyKGVuZ19maXJzdF9sYW5nID09ICJ5ZXMiKSkKZXhwMV9fbl9lbmdfbGFuZyA8LSByb3VuZCgoZXhwMV9fbl9lbmdfbGFuZyAvIG5yb3coZXhwMV9fZnVsbF9kYXRhKSkgKiAxMDAsIDIpCmBgYAoKIyMgUGFydGljaXBhbnRzCkEgdG90YWwgb2YgYHIgbnJvdyhleHAxX19mdWxsX2RhdGEpYCBzdWJqZWN0cyBjb21wbGV0ZWQgdGhlIG9ubGluZSBleHBlcmltZW50OiBgciBmb3JtYXRDKGxlbmd0aChleHAxX19mdWxsX2RhdGEkZ2VuZGVyW2V4cDFfX2Z1bGxfZGF0YSRnZW5kZXIgPT0gImZlbWFsZSJdKSlgIGZlbWFsZXMgKCpNKiBhZ2UgPSBgciBmb3JtYXRDKG1lYW4oYXMuZG91YmxlKGV4cDFfX2Z1bGxfZGF0YSRhZ2VbZXhwMV9fZnVsbF9kYXRhJGdlbmRlciA9PSAiZmVtYWxlIl0sIG5hLnJtID0gVFJVRSkpKWAgeWVhcnMsICpTRCogPSBgciBmb3JtYXRDKHNkKGFzLmRvdWJsZShleHAxX19mdWxsX2RhdGEkYWdlW2V4cDFfX2Z1bGxfZGF0YSRnZW5kZXIgPT0gImZlbWFsZSJdLCBuYS5ybSA9IFRSVUUpKSlgKSwgYHIgZm9ybWF0QyhsZW5ndGgoZXhwMV9fZnVsbF9kYXRhJGdlbmRlcltleHAxX19mdWxsX2RhdGEkZ2VuZGVyID09ICJtYWxlIl0pKWAgbWFsZXMgKCpNKiA9IGByIGZvcm1hdEMobWVhbihhcy5kb3VibGUoZXhwMV9fZnVsbF9kYXRhJGFnZVtleHAxX19mdWxsX2RhdGEkZ2VuZGVyID09ICJtYWxlIl0sIG5hLnJtID0gVFJVRSkpKWAgeWVhcnMsICpTRCogPSBgciBmb3JtYXRDKHNkKGFzLmRvdWJsZShleHAxX19mdWxsX2RhdGEkYWdlW2V4cDFfX2Z1bGxfZGF0YSRnZW5kZXIgPT0gIm1hbGUiXSwgbmEucm0gPSBUUlVFKSkpYCksIGFuZCBgciBmb3JtYXRDKGxlbmd0aChleHAxX19mdWxsX2RhdGEkZ2VuZGVyW2V4cDFfX2Z1bGxfZGF0YSRnZW5kZXIgPT0gIm5vbi1iaW5hcnkiXSkpYCBub24tYmluYXJ5ICgqTSogPSBgciBmb3JtYXRDKG1lYW4oYXMuZG91YmxlKGV4cDFfX2Z1bGxfZGF0YSRhZ2VbZXhwMV9fZnVsbF9kYXRhJGdlbmRlciA9PSAibm9uLWJpbmFyeSJdLCBuYS5ybSA9IFRSVUUpKSlgIHllYXJzLCAqU0QqID0gYHIgZm9ybWF0QyhzZChhcy5kb3VibGUoZXhwMV9fZnVsbF9kYXRhJGFnZVtleHAxX19mdWxsX2RhdGEkZ2VuZGVyID09ICJub24tYmluYXJ5Il0sIG5hLnJtID0gVFJVRSkpKWApLiBUaGlzIHNhbXBsZSBzaXplIGlzIHR5cGljYWwgaW4gdGhlIGxpdGVyYXR1cmUgZm9yIGEgbWVkaXVtIGVmZmVjdCBzaXplICguMjUpLCBob3dldmVyLCBkdWUgdG8gbWl4ZWQgY29uY2x1c2lvbnMgcmVnYXJkaW5nIHRoZSBkaXJlY3Rpb24gb2YgUiArIEYsIGl0IHdhcyBkaWZmaWN1bHQgdG8gZGV0ZXJtaW5lIGFuIGV4YWN0IGEtcHJpb3JpIG51bWJlciBvZiBzdWJqZWN0cy4KClRvIG1lZXQgb3VyIFlBIHJlcXVpcmVtZW50cywgYWxsIHBhcnRpY2lwYW50cyB3ZXJlIHJlcXVpcmVkIHRvIGJlIGJldHdlZW4gMTgtNTkgeWVhcnMgb2YgYWdlIChhY3R1YWwgcmFuZ2U6IGByIG1pbihleHAxX19mdWxsX2RhdGEkYWdlLCBuYS5ybSA9IFRSVUUpYC1gciBtYXgoZXhwMV9fZnVsbF9kYXRhJGFnZSwgbmEucm0gPSBUUlVFKWApLiBBcyBvdXIgZXhwZXJpbWVudCBpbnZvbHZlZCBFbmdsaXNoIHdvcmQgc3RpbXVsaSwgd2UgYWxzbyBhc2tlZCBzdWJqZWN0cyB3aGV0aGVyIEVuZ2xpc2ggd2FzIHRoZWlyIGZpcnN0IGxhbmd1YWdlOyB0aGUgdmFzdCBtYWpvcml0eSAoYHIgZXhwMV9fbl9lbmdfbGFuZ2AlKSByZXBvcnRlZCB0aGF0IEVuZ2xpc2ggd2FzIGluZGVlZCB0aGVpciBmaXJzdCBsYW5ndWFnZS4KClRoZSBjdXJyZW50IHNhbXBsZSB3YXMgcHJpbWFyaWx5IGNvbXByaXNlZCBvZiBwYXJ0aWNpcGFudHMgc291cmNlZCBmcm9tIHZvbHVudGFyeSBwYXJ0aWNpcGF0aW9uIHdlYnNpdGVzIHN1Y2ggYXMgXGhyZWZ7aHR0cHM6Ly93d3cucHJvbGlmaWMuY28vfXtQcm9saWZpYyBBY2FkZW1pY30gKGByIGV4cDFfX25fcHJvbGlmaWNgJSksIHdoZXJlIHBheW1lbnQgYXQgdGhlIHJhdGUgb2YgwqM1L2hyIHdhcyBnaXZlbiwgYW5kIHZpYSB0aGUgaW4tc2Nob29sIFxocmVme2h0dHBzOi8va2VlbGVwc3ljaG9sb2d5LnNvbmEtc3lzdGVtcy5jb20vfXtyZXNlYXJjaCBwYXJ0aWNpcGF0aW9uIHN5c3RlbX0gKGByIGV4cDFfX25fcnB0YCUpLCB3aGVyZSB0aGV5IHJlY2VpdmVkIGNvdXJzZSBwYXJ0aWNpcGF0aW9uIGNyZWRpdHMuIEEgc21hbGwgbnVtYmVyIG9mIHBhcnRpY2lwYW50cyB3ZXJlIGFsc28gcmVjcnVpdGVkIGZyb20gc29jaWFsIG1lZGlhIGFuZCBvdGhlciBvbmxpbmUgc291cmNlcyAoRmFjZWJvb2s6IGByIGV4cDFfX25fZmFjZWJvb2tgJTsgQ2FsbCBGb3IgUGFydGljaXBhbnRzOiBgciBleHAxX19uX2M0cGAlOyBSZWRkaXQ6IGByIGV4cDFfX25fcmVkZGl0YCU7IHVuc3BlY2lmaWVkOiBgciBleHAxX19uX3Vuc3BlY2lmaWVkYCUpLgoKIyMgTWF0ZXJpYWxzCkEgcmFuZG9tIHBvb2wgb2YgZ3JleS1zY2FsZSBsaW5lLWRyYXdpbmdzIHdlcmUgc291cmNlZCBmcm9tIEByb3NzaW9uMjAwNCwgYWxvbmcgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHdyaXR0ZW4td29yZCBvYmplY3QgbmFtZXMgKHNlZSBBcHBlbmRpeCBYWCkuIEFsbCBpdGVtcyB3ZXJlIGltcG9ydGVkIGludG8gUGhvdG9zaG9wIENDICgyMC4wLjA0IFJlbGVhc2UpLCB3aGVyZSB0aGV5IHdlcmUgY29udmVydGVkIGZyb20gdGhlaXIgbmF0aXZlIC5ibXAgZmlsZSBmb3JtYXQgaW50byAucG5nIGZpbGVzLiBUaGUgY29ycmVzcG9uZGluZyB3cml0dGVuLXdvcmQgaXRlbXMgd2VyZSBhbHNvIGNyZWF0ZWQgaW4gUGhvdG9zaG9wIHVzaW5nIHRoZSBDYWxpYnJpIHNhbnMtc2VyaWYgdHlwZWZhY2UgYW5kIGFnYWluIGV4cG9ydGVkIGFzIC5wbmdzLiBBbGwgaXRlbXMgd2VyZSBhdXRvbWF0aWNhbGx5IHJlc2l6ZWQgYW5kIHByZXNlbnRlZCBhdCAyNTB4MjUwcHggYnkgdGhlIG9ubGluZSBzdXJ2ZXkgcGxhdGZvcm0uCgojIyBQcm9jZWR1cmUKRGF0YSBjb2xsZWN0aW9uIHdhcyBjb25kdWN0ZWQgdmlhIHRoZSBvbmxpbmUgc3VydmV5IHBsYXRmb3JtIFxocmVme2h0dHBzOi8vd3d3LnF1YWx0cmljcy5jb20vdWsvfXtRdWFsdHJpY3N9LiBQYXJ0aWNpcGFudHMgaW5pdGlhbGx5IGNvbXBsZXRlZCBhbiBlbmNvZGluZyBwaGFzZSwgd2hlcmUgdGFyZ2V0IHN0aW11bGkgKHdvcmQgYW5kIHBpY3R1cmUgc3RpbXVsaSkgd2VyZSByYW5kb21seSBwcmVzZW50ZWQgb25lLWF0LWEtdGltZSBvbi1zY3JlZW4uIFRvIGVuc3VyZSBzdWJqZWN0cycgZGlyZWN0ZWQgdGhlaXIgYXR0ZW50aW9uIHRvd2FyZCBzdGltdWxpIGR1cmluZyB0aGUgc3R1ZHkgcGhhc2UsIHdlIHV0aWxpc2VkIGEgc2ltcGxlIGVuY29kaW5nIHF1ZXN0aW9uIGF0IHN0dWR5OiAiSXMgdGhpcyBhIHBpY3R1cmUgb3IgYSB3b3JkPyIuIEFsbCBwYXJ0aWNpcGFudHMgc2hvd2VkIGEgcmVzcG9uc2UgYWNjdXJhY3kgb2YgKz45MCUgYXQgc3R1ZHksIGluZGljYXRpbmcgYSBoaWdoIHJhdGUgb2YgYXR0ZW50aW9uIHRvd2FyZCB0aGUgcHJlc2VudGVkIHN0aW11bGkuIFRoaXMgYWJpbGl0eSB0byBkZXRlcm1pbmUgd2hldGhlciBwYXJ0aWNpcGFudHMgd2VyZSBjb25jZW50cmF0aW5nIGF0IHN0dWR5IGlzIHdoeSBhIGJsb2NrZWQgZGVzaWduIHdhcyBhdm9pZGVkIGF0IHN0dWR5IChpLmUuIHNlcGFyYXRlIHdvcmQgLyBwaWN0dXJlIGJsb2Nrcyk7IHNlcGFyYXRlIGJsb2NrcyBmb3IgZWFjaCBzdGltdWxpLWZvcm1hdCB3b3VsZCBtYWtlIG91ciBjdXJyZW50IGVuY29kaW5nIHF1ZXN0aW9uIHJlZHVuZGFudCwgYW5kIHdoaWxzdCB3ZSBjb3VsZCBoYXZlIHVzZWQgYSBkaWZmZXJlbnQgcXVlc3Rpb24gKGUuZy4gIklzIHRoaXMgaXRlbSBwbGVhc2FudD8iKSwgd2Ugd2VyZSBrZWVuIHRvIGF2b2lkIGFueSBhZm9yZW1lbnRpb25lZCBsZXZlbHMtb2YtcHJvY2Vzc2luZyBlZmZlY3RzLCB3aGVyZWJ5IGRlZXAgcHJvY2Vzc2luZyBxdWVzdGlvbnMgbWF5IHJlc3VsdCBpbiBjZWlsaW5nIGVmZmVjdHMgZm9yIHJlc3BvbnNlcyBtYWRlIHRvd2FyZCBwaWN0dXJlIHN0aW11bGkuCgpUaGUgZW5jb2RpbmcgcGhhc2Ugd2FzIGZvbGxvd2VkIGJ5IGEgc2hvcnQgZGlzdHJhY3RvciB0YXNrLCB3aGVyZWJ5IHBhcnRpY2lwYW50cyBjb21wbGV0ZWQgMjAgbXVsdGlwbGljYXRpb24gc3Vtcy4gVGhpcyB3YXMgZm9sbG93ZWQgYnkgdGhlIHJlY29nbml0aW9uIHRhc2ssIHdoZXJlIHN1YmplY3RzIHdlcmUgYWdhaW4gcmFuZG9tbHkgcHJlc2VudGVkIHdpdGggd29yZCBhbmQgcGljdHVyZSBpdGVtcyBvbi1hdC1hLXRpbWUgb24tc2NyZWVuLCBhbmQgd2VyZSByZXF1aXJlZCB0byByZXNwb25kICJPbGQiLyJOZXciIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSByZWNvZ25pc2VkIHRoZSBpdGVtIG9yIG5vdC4gIk9sZCIgcmVzcG9uc2VzIHdlcmUgc3VjY2VlZGVkIGJ5IGEgZm9sbG93LXVwIHNjcmVlbiB3aGVyZWJ5IHBhcnRpY2lwYW50cyB3ZXJlIGFza2VkIHRvIHJlcG9ydCB0aGVpciByZWNvZ25pdGlvbiBleHBlcmllbmNlIGZvciB0aGUgY3VycmVudCBpdGVtOyB0aGUgcmVzcG9uc2Utb3B0aW9ucyBhdmFpbGFibGUgZHVyaW5nIHRoaXMgZm9sbG93LXVwIHJlc3BvbnNlIHBhZ2UgZGlmZmVyZWQgYmV0d2VlbiBwYXJ0aWNpcGFudHMsIHdpdGggcmFuZG9tIGFsbG9jYXRpb24gaW50byBlaXRoZXIgdGhlIFJGRywgUkZCRywgb3IgUkYtUmF0aW5ncyByZXNwb25zZS1vcHRpb24gY29uZGl0aW9ucy4gSW5zdHJ1Y3Rpb25zIGZvciB0aGUgbWVtb3J5IHRlc3Qgd2VyZSBoaWdobHkgc2ltaWxhciBiZXR3ZWVuIGNvbmRpdGlvbnMsIGRldmlhdGluZyBvbmx5IHRvIGV4cGxhaW4ga2V5IGNoYW5nZXMgc3VjaCBhczogYWRkaXRpb25hbCByZXNwb25zZSBvcHRpb25zIChpLmUuICJCb3RoIiwgaW4gdGhlIFJGQkcgY29uZGl0aW9uKSwgYW5kIGhvdyBjZXJ0YWluIHJlc3BvbnNlcyBzaG91bGQgYmUgcmVwb3J0ZWQgKGkuZS4gMCBvbiBib3RoIHNjYWxlcyB0byByZXByZXNlbnQgIkd1ZXNzaW5nIiBpbiB0aGUgUkYtUmF0aW5ncyBjb25kaXRpb24pLiAKCiMjIERhdGEgYW5hbHlzaXMKRFZzIGNvbnNpc3RlZCBvZjogaSkgdGhlIHByb3BvcnRpb24gb2YgaGl0czsgaWkpIHRoZSBwcm9wb3J0aW9uIG9mIEZBczsgaWlpKSBvdmVyYWxsIHJlY29nbml0aW9uIChwcm9wb3J0aW9uIG9mIG92ZXJhbGwgaGl0cyBtaW51cyBwcm9wb3J0aW9uIG9mIEZBcyksIGl2KSBkJyAoZC1wcmltZTsgZGlzY3JpbWluYXRpb24pOyB2KSBjIChyZXNwb25zZS1iaWFzIGNyaXRlcmlvbikuIFByb3BvcnRpb25zIG9mIGhpdHMgYW5kIEZBcyB3ZXJlIGFsc28gY2FsY3VsYXRlZCBzZXBhcmF0ZWx5IGJhc2VkIHVwb24gZm9sbG93LXVwIHJlY29nbml0aW9uIGp1ZGdtZW50czogUmVjb2xsZWN0aW9uLCBGYW1pbGlhcml0eSwgYW5kIEd1ZXNzaW5nLiBUbyBhY2hpZXZlIGNvbXBhcmFibGUgcHJvcG9ydGlvbnMgYWNyb3NzIGVhY2ggb2YgdGhlIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb25zIC0gaW4gb3JkZXIgdG8gZXhhbWluZSB0aGUgUFNFIGFjcm9zcyB0aGUgZGlmZmVyZW50IGdyb3VwcyAtIGVhY2ggZ3JvdXAgaGFkIHNsaWdodGx5IGRpZmZlcmVudCBwcm9wb3J0aW9uIGNhbGN1bGF0aW9ucy4gRm9yIHRoZSBSRkcgZ3JvdXAsIHNpbXBsZSBwcm9wb3J0aW9ucyB3ZXJlIHVzZWQgKGkuZS4gd2hhdCBwcm9wb3J0aW9uIG9mIGhpdHMgLyBGQXMgd2VyZSBhc3NpZ25lZCBSZWNvbGxlY3Rpb24sIEZhbWlsaWFyaXR5LCBhbmQgR3Vlc3NpbmcpLiBGb3IgdGhlIFJGQkcgZ3JvdXAsIHdlIHNlcGFyYXRlbHkgYWRkZWQgdGhlIHByb3BvcnRpb24gb2YgIkJvdGgiIHRvIFJlY29sbGVjdGlvbiBhbmQgRmFtaWxpYXJpdHkgcHJvcG9ydGlvbnMsIHNpbmNlIGl0IHdhcyBkZWZpbmVkIGFzIHJlcHJlc2VudGluZyBib3RoIHByb2Nlc3NlcyBzaW11bHRhbmVvdXNseS4gRm9yIHRoZSBSRi1SYXRpbmdzIGdyb3VwLCBwcm9wb3J0aW9ucyB3ZXJlIGNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIG51bWJlciBvZiByZXNwb25zZXMgYWJvdmUgdGhlIHRocmVzaG9sZCBvZis+MzsgYSByZXNwb25zZSB3YXMgY2xhc3NpZmllZCBhcyAiUmVjb2xsZWN0aW9uIiB3aGVuIHN1YmplY3RzIHJhdGVkIGJldHdlZW4gMy01IG9uIHRoYXQgcGFydGljdWxhciBzY2FsZSAoYW55IEZhbWlsaWFyaXR5IHJhdGluZyB3YXMgcGVybWlzc2libGUpLCBhbmQgYSByZXNwb25zZSB3YXMgY2xhc3NpZmllZCBhcyAiRmFtaWxpYXJpdHkiIHdoZW4gc3ViamVjdHMgcmF0ZWQgYmV0d2VlbiAzLTUgb24gdGhhdCBwYXJ0aWN1bGFyIHNjYWxlIChhbnkgUmVjb2xsZWN0aW9uIHJhdGluZyB3YXMgcGVybWlzc2libGUpLiBHdWVzc2luZyByZXNwb25zZXMgd2VyZSBjYWxjdWxhdGVkIGFzIHRoZSBwcm9wb3J0aW9uIG9mIHJlc3BvbnNlcyB3aGVyZSBwYXJ0aWNpcGFudHMgcmF0ZWQgMCBvbiBib3RoIHNjYWxlcyB0b3dhcmQgYSBzaW5nbGUgaXRlbSAocGFydGljaXBhbnRzIHdlcmUgaW5zdHJ1Y3RlZCB0byByZXNwb25kIGluIHRoaXMgd2F5IGlmIHRoZWlyIHJlc3BvbnNlIHdhcyBhIHJlYykuIAoKTm90ZTogc2hvdWxkIHdlIGhhdmUgYSBwZXJmb3JtYW5jZSBjdXQgb2ZmPyBTb21lIHBlb3BsZSBoYXZlIHZlcnkgbG93IHBlcmZvcm1hbmNlIChsaWtlIDAgb3IgMSBoaXRzKSBhbmQgc2hvdWxkIHByb2JhYmx5IGJlIGV4Y2x1ZGVkPwoKXG5ld3BhZ2UKIyBSZXN1bHRzCgpgYGB7ciBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgdGFibGVfbnVtYmVyaW5nKCJleHAxX19oaXRfYW5kX0ZBX2NhcHRpb24iLCAiTWVhbiBwcm9wb3J0aW9uIG9mIGhpdHMgYW5kIEZBcyAKICAgICAgICAgICAgICAgICAgICBieSBzdGltdWxpLWZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbi4iLCAKICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gRkFMU0UpCmBgYAoKIyMgT3ZlcmFsbCBoaXRzLCBmYWxzZSBhbGFybXMgKEZBcyksIGFuZCByZWNvZ25pdGlvbgpTZXBhcmF0ZSAyIChzdGltdWxpIGZvcm1hdDogd29yZHMsIHBpY3R1cmVzKSB4IDMgKHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb246IFJGRy1qdWRnbWVudHMsIFJGQkctanVkZ21lbnRzLCBSRi1yYXRpbmdzKSBtaXhlZCBBTk9WQXMgd2VyZSBjb25kdWN0ZWQgb24gdGhlIG1lYW4gcHJvcG9ydGlvbiBvZiBoaXRzIGFuZCBmYWxzZSBhbGFybXMgKEZBczsgc2VlIGByIHRhYmxlX251bWJlcmluZygiZXhwMV9faGl0X2FuZF9GQV9jYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKS4KCmByIHRhYmxlX251bWJlcmluZygiZXhwMV9faGl0X2FuZF9GQV9jYXB0aW9uIilgCmBgYHtyLCBlY2hvPUZBTFNFLCBjYWNoZT1GQUxTRX0KICAgIGV4cDFfX3RhYmxlX2hpdHNfYW5kX0ZBcyAlPiUKICAgICAgICBrYWJsZSgibGF0ZXgiLCBib29rdGFicyA9IFQpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcobGF0ZXhfb3B0aW9ucyA9ICJob2xkX3Bvc2l0aW9uIikgJT4lCiAgICAgICAgcGFja19yb3dzKCJTdGltdWxpLWZvcm1hdCIsIDEsIDIpICU+JQogICAgICAgIHBhY2tfcm93cygiUmVzcG9uc2Utb3B0aW9uIiwgMywgNSkgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiNGNtIikKYGBgCgoKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBUb3RhbCBoaXRzOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfaGl0IDwtCiAgICAgIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAxX19hbm92YV9wcm9wX2hpdCkKICAgIAojIyAgTWFpbiBlZmZlY3RzOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfaGl0JGZ1bGwkU3RpbXVsaUZvcm1hdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9oaXQkZnVsbCRTdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfaGl0JGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdCAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCgojIyAgUGFpcndpc2UgKHN0aW0tZm9ybWF0KToKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMgPC0gCiAgICAgIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfaGl0X3N0aW1fZm9ybWF0X21tZWFucykKICAgIGV4cDFfX3BpY3NfcHJvcF9oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9oaXRfc3RpbV9mb3JtYXRfbW1lYW5zJGVzdGltYXRlJFBpY3R1cmVzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX193b3Jkc19wcm9wX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMkZXN0aW1hdGUkV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9zdGltX2Zvcm1hdF9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2hpdF9zdGltX2Zvcm1hdF9wYWlyd2lzZSkKICAgIGV4cDFfX3BpY3Nfd29yZHNfaGl0X3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9zdGltX2Zvcm1hdF9wYWlyd2lzZSRmdWxsICU+JSBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQoKIyMgIFBhaXJ3aXNlIChyZXNwLW9wdGlvbik6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9oaXRfcmVzcF9vcHRpb25fbW1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfaGl0X3Jlc3Bfb3B0aW9uX21tZWFucykKICAgIGV4cDFfX3JmZ19wcm9wX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZHICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZmJnX3Byb3BfaGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfaGl0X3Jlc3Bfb3B0aW9uX21tZWFucyRlc3RpbWF0ZSRSRkJHICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZnJhdGluZ3NfcHJvcF9oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9oaXRfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGX1JhdGluZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSkKICAgIGV4cDFfX3JmZ19yZnJfaGl0X3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGR19SRl9SYXRpbmdzICU+JQogICAgICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQpgYGAKCgombmJzcDsKCkluIHRoZSBBTk9WQSBvbiB0aGUgcHJvcG9ydGlvbiBvZiBoaXRzLCB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpLWZvcm1hdCwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfaGl0JGZ1bGwkU3RpbXVsaUZvcm1hdGA7ICBwaWN0dXJlcyAoYHIgZXhwMV9fcGljc19wcm9wX2hpdF9tZWFuYCkgcHJvZHVjZWQgYSBoaWdoZXIgbnVtYmVyIG9mIGhpdHMgdGhhbiB3b3JkcyAoYHIgZXhwMV9fd29yZHNfcHJvcF9oaXRfbWVhbmApLCBgciBleHAxX19waWNzX3dvcmRzX2hpdF90dGVzdGAsIHN1cHBvcnRpbmcgdGhlIG5vdGlvbiB0aGF0IHN0aW11bGktZm9ybWF0IHBsYXlzIGEgcm9sZSBpbiBpdGVtIHJlY29nbml0aW9uLiBUaGVyZSB3YXMgYWxzbyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb24sIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uYCwgd2l0aCB0aGUgUkZHIGdyb3VwIChgciBleHAxX19yZmdfcHJvcF9oaXRfbWVhbmApIHNob3dpbmcgbW9yZSBoaXRzIGNvbXBhcmVkIHRvIHRoZSBSRi1SYXRpbmdzIGdyb3VwIChgciBleHAxX19yZnJhdGluZ3NfcHJvcF9oaXRfbWVhbmApLCBgciBleHAxX19yZmdfcmZyX2hpdF90dGVzdGAsIHN1Z2dlc3RpbmcgZmV3ZXIgYXZhaWxhYmxlIHJlc3BvbnNlLW9wdGlvbnMgbWF5IGZhY2lsaXRhdGUgYWNjdXJhdGUgcmVjb2duaXRpb24uIFRoZXJlIHdlcmUgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gZWZmZWN0cywgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfaGl0JGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdGAuIENsaWNrIGhlcmUgdG8gc2VlIG91dHB1dDogW0FwcGVuZGl4IEEgLSBBTk9WQSBQcm9wIGhpdHNdW10uCgpcbmV3cGFnZQpgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KIyMgIFRvdGFsIEZBczoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX0ZBIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAxX19hbm92YV9wcm9wX0ZBKQojIyAgTWFpbiBlZmZlY3RzOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfRkEkZnVsbCRTdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX0ZBJGZ1bGwkU3RpbXVsaUZvcm1hdCAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9GQSRmdWxsJFJlc3BvbnNlT3B0aW9uIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb24gJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfRkEkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdCAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiMjICBQYWlyd2lzZSAoc3RpbS1mb3JtYXQpOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfRkFfc3RpbV9mb3JtYXRfbW1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfRkFfc3RpbV9mb3JtYXRfbW1lYW5zKQogICAgZXhwMV9fcGljc19wcm9wX0ZBX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfRkFfc3RpbV9mb3JtYXRfbW1lYW5zJGVzdGltYXRlJFBpY3R1cmVzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX193b3Jkc19wcm9wX0ZBX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfRkFfc3RpbV9mb3JtYXRfbW1lYW5zJGVzdGltYXRlJFdvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9GQV9zdGltX2Zvcm1hdF9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX0ZBX3N0aW1fZm9ybWF0X3BhaXJ3aXNlKQogICAgZXhwMV9fcGljc193b3Jkc19GQV90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9GQV9zdGltX2Zvcm1hdF9wYWlyd2lzZSRmdWxsICU+JSBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQpgYGAKClRoZSBBTk9WQSBvbiB0aGUgcHJvcG9ydGlvbiBvZiBGQXMgYWxzbyBoaWdobGlnaHRzIHRoZSByb2xlIG9mIHN0aW11bGktZm9ybWF0IG9uIHRoZSBtZW1vcmFiaWxpdHkgb2YgaXRlbXMsIHdpdGggYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpLWZvcm1hdCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9GQSRmdWxsJFN0aW11bGlGb3JtYXRgIHNob3dpbmcgd29yZHMgKGByIGV4cDFfX3dvcmRzX3Byb3BfRkFfbWVhbmApIHByb2R1Y2VkIG1vcmUgRkFzIHRoYW4gcGljdHVyZXMgKGByIGV4cDFfX3BpY3NfcHJvcF9GQV9tZWFuYCksIGByIGV4cDFfX3BpY3Nfd29yZHNfRkFfdHRlc3RgLiBUaGVyZSB3YXMgbm8gc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbiwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfRkEkZnVsbCRSZXNwb25zZU9wdGlvbmAsIG9yIHNpZ25pZmljYW50IGludGVyYWN0aW9uLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9GQSRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXRgLiBDbGljayBoZXJlIHRvIHNlZSBvdXRwdXQ6IFtBcHBlbmRpeCBCIC0gQU5PVkEgUHJvcCBGQXNdW10uCgpgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KIyMgIFJlY29nOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2cgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDFfX2Fub3ZhX3Byb3BfcmVjb2cpCiMjICBNYWluIGVmZmVjdHM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNvZyRmdWxsJFN0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2ckZnVsbCRTdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY29nJGZ1bGwkUmVzcG9uc2VPcHRpb24gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2ckZnVsbCRSZXNwb25zZU9wdGlvbiAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNvZyRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2ckZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKCiMjICBQYWlyd2lzZSAoc3RpbS1mb3JtYXQpOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2dfc3RpbV9mb3JtYXRfbW1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfcmVjb2dfc3RpbV9mb3JtYXRfbW1lYW5zKQogICAgZXhwMV9fcGljc19wcm9wX3JlY29nX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2dfc3RpbV9mb3JtYXRfbW1lYW5zJGVzdGltYXRlJFBpY3R1cmVzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX193b3Jkc19wcm9wX3JlY29nX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2dfc3RpbV9mb3JtYXRfbW1lYW5zJGVzdGltYXRlJFdvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNvZ19zdGltX2Zvcm1hdF9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX3JlY29nX3N0aW1fZm9ybWF0X3BhaXJ3aXNlKQogICAgZXhwMV9fcGljc193b3Jkc19yZWNvZ190dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNvZ19zdGltX2Zvcm1hdF9wYWlyd2lzZSRmdWxsICU+JSBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQpgYGAKCkEgc2ltaWxhciBwYXR0ZXJuIHdhcyBhZ2FpbiByZWZsZWN0ZWQgaW4gdGhlIEFOT1ZBIG9uIG92ZXJhbGwgcGVyZm9ybWFuY2UgYWNjdXJhY3k7IGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaS1mb3JtYXQgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjb2ckZnVsbCRTdGltdWxpRm9ybWF0YCByZXZlYWxlZCB0aGF0IHBpY3R1cmVzIChgciBleHAxX19waWNzX3Byb3BfcmVjb2dfbWVhbmApIHNob3dlZCBhbiBpbmNyZWFzZWQgb3ZlcmFsbCB0YXNrIHBlcmZvcm1hbmNlIGFjY3VyYWN5ICBjb21wYXJlZCB3aXRoIHdvcmRzIChgciBleHAxX193b3Jkc19wcm9wX3JlY29nX21lYW5gKSwgYHIgZXhwMV9fcGljc193b3Jkc19yZWNvZ190dGVzdGAuIFRoZXJlIHdhcyBubyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiByZXNwb25zZS1vcHRpb24gY29uZGl0aW9uLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNvZyRmdWxsJFJlc3BvbnNlT3B0aW9uYCwgb3Igc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24sIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY29nJGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdGAuIENsaWNrIGhlcmUgdG8gc2VlIG91dHB1dDogW0FwcGVuZGl4IEMgLSBBTk9WQSBPdmVyYWxsIHJlY29nbml0aW9uXVtdLgoKCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICB0YWJsZV9udW1iZXJpbmcoImV4cDFfX2RwcmltZV9hbmRfY19jYXB0aW9uIiwgIk1lYW4gZCcgYW5kIGMgc2NvcmVzIGJ5IAogICAgICAgICAgICAgICAgICAgIHN0aW11bGktZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gY29uZGl0aW9uLiIsIGRpc3BsYXkgPSBGQUxTRSkKYGBgCgojIyBEaXNjcmltaW5hdGlvbiAoZCcpIGFuZCByZXNwb25zZSBiaWFzIChjKQpUbyBhc3Nlc3MgdGhlIHJvbGVzIG9mIGRpc2NyaW1pbmF0aW9uIGFuZCByZXNwb25zZSBiaWFzLCBzZXBhcmF0ZSAyIChzdGltdWxpIGZvcm1hdDogd29yZHMsIHBpY3R1cmVzKSB4IDMgKHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb246IFJGRy1qdWRnbWVudHMsIFJGQkctanVkZ21lbnRzLCBSRi1yYXRpbmdzKSBtaXhlZCBBTk9WQXMgd2VyZSBjb25kdWN0ZWQgb24gZOKAmSAoZC1wcmltZTsgbWVhc3VyZSBvZiBzZW5zaXRpdml0eSkgIGFuZCBjLXNjb3JlcyAoZGVjaXNpb24gY3JpdGVyaW9uOyBzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAxX19kcHJpbWVfYW5kX2NfY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuCgpgciB0YWJsZV9udW1iZXJpbmcoImRwcmltZV9hbmRfY19jYXB0aW9uIilgCmBgYHtyLCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQogICAgZXhwMV9fdGFibGVfZHByaW1lX2FuZF9jICU+JQogICAgICBrYWJsZSgibGF0ZXgiLCBib29rdGFicyA9IFQpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcobGF0ZXhfb3B0aW9ucyA9ICJob2xkX3Bvc2l0aW9uIikgJT4lCiAgICAgICAgcGFja19yb3dzKCJTdGltdWxpLWZvcm1hdCIsIDEsIDIpICU+JQogICAgICAgIHBhY2tfcm93cygiUmVzcG9uc2Utb3B0aW9uIiwgMywgNSkgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiNGNtIikKYGBgCgoKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBkJzoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2RwcmltZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuYWZleF9hb3YoZXhwMV9fYW5vdmFfcHJvcF9kcHJpbWUpCgojIyAgTWFpbiBlZmZlY3RzOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lJGZ1bGwkU3RpbXVsaUZvcm1hdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9kcHJpbWUkZnVsbCRTdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2RwcmltZSRmdWxsJFJlc3BvbnNlT3B0aW9uIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2RwcmltZSRmdWxsJFJlc3BvbnNlT3B0aW9uICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2RwcmltZSRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lJGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdCAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCgojIyAgUGFpcndpc2UgKHN0aW0tZm9ybWF0KToKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2RwcmltZV9zdGltX2Zvcm1hdF9tbWVhbnMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9kcHJpbWVfc3RpbV9mb3JtYXRfbW1lYW5zKQogICAgZXhwMV9fcGljc19wcm9wX2RwcmltZV9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2RwcmltZV9zdGltX2Zvcm1hdF9tbWVhbnMkZXN0aW1hdGUkUGljdHVyZXMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3dvcmRzX3Byb3BfZHByaW1lX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lX3N0aW1fZm9ybWF0X21tZWFucyRlc3RpbWF0ZSRXb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lX3N0aW1fZm9ybWF0X3BhaXJ3aXNlIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfZHByaW1lX3N0aW1fZm9ybWF0X3BhaXJ3aXNlKQogICAgZXhwMV9fcGljc193b3Jkc19kcHJpbWVfdHRlc3QgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lX3N0aW1fZm9ybWF0X3BhaXJ3aXNlJGZ1bGwgJT4lIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmBgYAoKVGhlIEFOT1ZBIG9uIGQnIHNjb3JlcyB3YXMgY29uc2lzdGVudCB3aXRoIHRoZSBoaXRzLCBGQXMsIGFuZCBvdmVyYWxsIHJlY29nbml0aW9uIGZpbmRpbmdzOyB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpLWZvcm1hdCwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lJGZ1bGwkU3RpbXVsaUZvcm1hdGAgc2hvd2luZyBwaWN0dXJlcyAoYHIgZXhwMV9fcGljc19wcm9wX2RwcmltZV9tZWFuYCkgZmFjaWxpdGF0ZWQgYmV0dGVyIGRpc2NyaW1pbmF0aW9uIGJldHdlZW4gaGl0cyBhbmQgRkFzIHRoYW4gd29yZHMgKGByIGV4cDFfX3dvcmRzX3Byb3BfZHByaW1lX21lYW5gKSwgYHIgZXhwMV9fcGljc193b3Jkc19kcHJpbWVfdHRlc3RgLiBUaGVyZSB3YXMgYWdhaW4gbm8gc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbiwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lJGZ1bGwkUmVzcG9uc2VPcHRpb25gLCBvciBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZHByaW1lJGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdGAuIENsaWNrIGhlcmUgdG8gc2VlIG91dHB1dDogW0FwcGVuZGl4IEQgLSBBTk9WQSBkJyAoZGlzY3JpbWluYXRpb24pXVtdLgoKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBkJzoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2MgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDFfX2Fub3ZhX3Byb3BfYykKCiMjICBNYWluIGVmZmVjdHM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9jJGZ1bGwkU3RpbXVsaUZvcm1hdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9jJGZ1bGwkU3RpbXVsaUZvcm1hdCAlPiUgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9jJGZ1bGwkUmVzcG9uc2VPcHRpb24gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfYyRmdWxsJFJlc3BvbnNlT3B0aW9uICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2MkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2MkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAKIyMgIFBhaXJ3aXNlIChyZXNwLW9wdGlvbik6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9jX3Jlc3Bfb3B0aW9uX21tZWFucyA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2NfcmVzcF9vcHRpb25fbW1lYW5zKQogICAgZXhwMV9fcmZnX2NfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9jX3Jlc3Bfb3B0aW9uX21tZWFucyRlc3RpbWF0ZSRSRkcgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3JmYmdfY19tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2NfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGQkcgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3Jmcl9jX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfY19yZXNwX29wdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZfUmF0aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfY19yZXNwX29wdGlvbl9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2NfcmVzcF9vcHRpb25fcGFpcndpc2UpCiAgICBleHAxX19yZmdfcmZyX2NfdHRlc3QgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfY19yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGR19SRl9SYXRpbmdzICU+JSBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQpgYGAKCkluIHRoZSBBTk9WQSBvbiBjLXNjb3JlcywgdGhlcmUgd2FzIG5vIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHN0aW11bGktZm9ybWF0LCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9jJGZ1bGwkU3RpbXVsaUZvcm1hdGAsIGluZGljYXRpbmcgcmVzcG9uc2UgYmlhcyB3YXMgdW5hZmZlY3RlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgcGFydGljaXBhbnRzIHdlcmUgcmVzcG9uZGluZyB0byB3b3JkcyBvciBwaWN0dXJlcy4gVGhlcmUgd2FzLCBob3dldmVyLCBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb24sIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2MkZnVsbCRSZXNwb25zZU9wdGlvbmA7IHRob3NlIGluIHRoZSBSRi1SYXRpbmdzIGNvbmRpdGlvbiAoYHIgZXhwMV9fcmZyX2NfbWVhbmApIHNob3dlZCBoaWdoZXIgYy1zY29yZXMgKGFuZCB0aHVzIGEgbW9yZSBjb25zZXJ2YXRpdmUgcmVzcG9uc2UgYmlhcykgdGhhbiB0aG9zZSBpbiB0aGUgUkZHIGNvbmRpdGlvbiAoYHIgZXhwMV9fcmZnX2NfbWVhbmApLCBgciBleHAxX19yZmdfcmZyX2NfdHRlc3RgLCBzdWdnZXN0aW5nIHBhcnRpY2lwYW50cyB3ZXJlIGxlc3MgbGlrZWx5IHRvIHJlc3BvbmQgIk9sZCIgd2hlbiB0aGV5IHdlcmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBtb3JlIGRldGFpbGVkIGZvbGxvdy11cCByZWNvZ25pdGlvbiBqdWRnbWVudHMgKFJlY29sbGVjdGlvbjogMC01IC8gRmFtaWxpYXJpdHk6IDAtNSksIGNvbXBhcmVkIHRvIHNpbXBseSBzZWxlY3Rpbmcgb25lIG9mIHRocmVlIG9wdGlvbnMgKFIsRiwgb3IgRykuIFRoZXJlIHdlcmUgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gZWZmZWN0cywgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfYyRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXRgLiBDbGljayBoZXJlIHRvIHNlZSBvdXRwdXQ6IFtBcHBlbmRpeCBFIC0gQU5PVkEgYyAoYmlhcyldW10uCgojIyBIaXRzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgRmFtaWxpYXJpdHksIGFuZCBHdWVzc2luZwpUbyBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2Ygc3RpbXVsaS1mb3JtYXQgYW5kIHJlc3BvbnNlLW9wdGlvbiBvbiBhY2N1cmF0ZSByZWNvZ25pdGlvbiBtZW1vcnkganVkZ21lbnRzLCBzZXBhcmF0ZSAyIChzdGltdWxpIGZvcm1hdDogd29yZHMsIHBpY3R1cmVzKSB4IDMgKHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb246IFJGRy1qdWRnbWVudHMsIFJGQkctanVkZ21lbnRzLCBSRi1yYXRpbmdzKSBtaXhlZCBBTk9WQXMgd2VyZSBjb25kdWN0ZWQgb24gdGhlIG1lYW4gcHJvcG9ydGlvbiBvZiBoaXRzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgRmFtaWxpYXJpdHksIGFuZCBHdWVzc2luZyAoc2VlIGByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDFfX3Byb3BfaGl0X2NhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWApLiAKYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cyA9IEZBTFNFLCBjYWNoZT1GQUxTRX0KICAgIGZpZ3VyZV9udW1iZXJpbmcoImV4cDFfX3Byb3BfaGl0X2NhcHRpb24iLCAiUHJvcG9ydGlvbiBvZiBoaXRzIGFzc2lnbmVkIAogICAgICAgICAgICAgICAgICAgICBSZWNvbGxlY3Rpb24sIEZhbWlsaWFyaXR5LCBhbmQgR3Vlc3NpbmcsIGJ5IHN0aW11bGktZm9ybWF0IGFuZCAKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbi4iLCBkaXNwbGF5ID0gRkFMU0UpCmBgYAoKYGBge3IgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9NS41LCBlY2hvPUZBTFNFfQogICAgZXhwMV9faGl0X2ZpZ3VyZQpgYGAKYHIgZmlndXJlX251bWJlcmluZygiZXhwMV9fcHJvcF9oaXRfY2FwdGlvbiIpYAoKIyMjIFJlY29sbGVjdGlvbgoKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBSZWNvbGxlY3Rpb24gaGl0czoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXQgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdCkKCiMjICBNYWluIGVmZmVjdHM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0JGZ1bGwkU3RpbXVsaUZvcm1hdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0JGZ1bGwkU3RpbXVsaUZvcm1hdCAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0JGZ1bGwkUmVzcG9uc2VPcHRpb24gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXQkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0IDwtCiAgICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXQkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKCiMjICBQYWlyd2lzZSAoc3RpbS1mb3JtYXQpOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9yZWNfaGl0X3N0aW1fZm9ybWF0X21tZWFucykKICAgIGV4cDFfX3BpY3NfcHJvcF9yZWNfaGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMkZXN0aW1hdGUkUGljdHVyZXMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3dvcmRzX3Byb3BfcmVjX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXRfc3RpbV9mb3JtYXRfbW1lYW5zJGVzdGltYXRlJFdvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9zdGltX2Zvcm1hdF9wYWlyd2lzZSkKICAgIGV4cDFfX3BpY3Nfd29yZHNfcmVjX2hpdF90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlJGZ1bGwgJT4lIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCgojIyAgUGFpcndpc2UgKHJlc3Atb3B0aW9uKToKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXRfcmVzcF9vcHRpb25fbW1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMpCiAgICBleHAxX19yZmdfcmVjX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXRfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGRyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZiZ19yZWNfaGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZCRyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZyX3JlY19oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0X3Jlc3Bfb3B0aW9uX21tZWFucyRlc3RpbWF0ZSRSRl9SYXRpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSkKCiAgICBleHAxX19yZmdfcmZiZ19yZWNfaGl0X3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXRfcmVzcF9vcHRpb25fcGFpcndpc2UkZnVsbCRSRkdfUkZCRyAlPiUKICAgICAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKICAgIGV4cDFfX3JmZ19yZnJfcmVjX2hpdF90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfaGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlJGZ1bGwkUkZHX1JGX1JhdGluZ3MgJT4lCiAgICAgIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpICAKICAgIGV4cDFfX3JmYmdfcmZyX3JlY19oaXRfdHRlc3QgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGQkdfUkZfUmF0aW5ncyAlPiUKICAgICAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikgIApgYGAKClRoZSBBTk9WQSBvbiBSZWNvbGxlY3RlZCBoaXRzIHJldmVhbGVkIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaS1mb3JtYXQsIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19oaXQkZnVsbCRTdGltdWxpRm9ybWF0YCwgd2l0aCBwaWN0dXJlcyAoYHIgZXhwMV9fcGljc19wcm9wX3JlY19oaXRfbWVhbmApIHNob3dpbmcgYSBoaWdoZXIgcHJvcG9ydGlvbiBvZiBSZWNvbGxlY3RlZCBoaXRzIHRoYW4gd29yZHMgKGByIGV4cDFfX3dvcmRzX3Byb3BfcmVjX2hpdF9tZWFuYCksIGByIGV4cDFfX3BpY3Nfd29yZHNfcmVjX2hpdF90dGVzdGAgLSBjb25zaXN0ZW50IHdpdGggdGhlIHByZXZpb3VzIGZpbmRpbmdzIHRvIHN1Z2dlc3QgYW4gZW5oYW5jZWQgbWVtb3JhYmlsaXR5IGluIHBpY3R1cmVzIGNvbXBhcmVkIHRvIHdvcmRzLiBUaGVyZSB3YXMgYWxzbyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHJlc3BvbnNlLW9wdGlvbiwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uYDsgdGhlIFJGLVJhdGluZ3MgZ3JvdXAgKGByIGV4cDFfX3Jmcl9yZWNfaGl0X21lYW5gKSBzaG93ZWQgc2lnbmlmaWNhbnRseSBtb3JlIFJlY29sbGVjdGVkIGhpdHMgY29tcGFyZWQgdG8gYm90aCB0aGUgUkZHLWdyb3VwIChgciBleHAxX19yZmdfcmVjX2hpdF9tZWFuYCksIGByIGV4cDFfX3JmZ19yZnJfcmVjX2hpdF90dGVzdGAsIGFuZCB0aGUgUkZCRy1ncm91cCAoYHIgZXhwMV9fcmZiZ19yZWNfaGl0X21lYW5gKSwgYHIgZXhwMV9fcmZiZ19yZnJfcmVjX2hpdF90dGVzdGAuIFRoZXJlIHdlcmUgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gZWZmZWN0cywgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXRgLiBDbGljayBoZXJlIHRvIHNlZSBvdXRwdXQ6IFtBcHBlbmRpeCBGIC0gQU5PVkEgUmVjIGhpdHNdW10uCgojIyMgRmFtaWxpYXJpdHkKCmBgYHtyLCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQojIyAgRmFtaWxpYXJpdHkgaGl0czoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXQgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdCkKIyMgIE1haW4gZWZmZWN0czoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXQkZnVsbCRTdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXQkZnVsbCRTdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXQkZnVsbCRSZXNwb25zZU9wdGlvbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0JGZ1bGwkUmVzcG9uc2VPcHRpb24gJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQoKIyMgIFBhaXJ3aXNlIChzdGltLWZvcm1hdCk6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X3N0aW1fZm9ybWF0X21tZWFucyA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2ZhbV9oaXRfc3RpbV9mb3JtYXRfbW1lYW5zKQogICAgZXhwMV9fcGljc19wcm9wX2ZhbV9oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X3N0aW1fZm9ybWF0X21tZWFucyRlc3RpbWF0ZSRQaWN0dXJlcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fd29yZHNfcHJvcF9mYW1faGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMkZXN0aW1hdGUkV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXRfc3RpbV9mb3JtYXRfcGFpcndpc2UgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlKQogICAgZXhwMV9fcGljc193b3Jkc19mYW1faGl0X3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXRfc3RpbV9mb3JtYXRfcGFpcndpc2UkZnVsbCAlPiUgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKCiMjICBQYWlyd2lzZSAocmVzcC1vcHRpb24pOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX21tZWFucykKICAgIGV4cDFfX3JmZ19mYW1faGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZHICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZmJnX2ZhbV9oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX21tZWFucyRlc3RpbWF0ZSRSRkJHICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZnJfZmFtX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXRfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGX1JhdGluZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXRfcmVzcF9vcHRpb25fcGFpcndpc2UgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlKQogIAogICAgZXhwMV9fcmZnX3JmYmdfZmFtX2hpdF90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlJGZ1bGwkUkZHX1JGQkcgJT4lCiAgICAgIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCiAgICBleHAxX19yZmdfcmZyX2ZhbV9oaXRfdHRlc3QgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGR19SRl9SYXRpbmdzICU+JQogICAgICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQogICAgZXhwMV9fcmZiZ19yZnJfZmFtX2hpdF90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlJGZ1bGwkUkZCR19SRl9SYXRpbmdzICU+JQogICAgICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKSAgCiAgCiMjICBQYWlyd2lzZSAoaW50ZXJhY3Rpb24pOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX21tZWFucykKICAgIGV4cDFfX3JmZ193b3Jkc19mYW1faGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZmdfcGljc19mYW1faGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZHX1BpY3R1cmVzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZmJnX3dvcmRzX2ZhbV9oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX21tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZmJnX3BpY3NfZmFtX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXRfaW50ZXJhY3Rpb25fbW1lYW5zJGVzdGltYXRlJFJGQkdfUGljdHVyZXMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgZXhwMV9fcmZyX3dvcmRzX2ZhbV9oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX21tZWFucyRlc3RpbWF0ZSRSRl9SYXRpbmdzX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZnJfcGljc19mYW1faGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZfUmF0aW5nc19QaWN0dXJlcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogIAogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9zdGltZm9ybWF0IDwtCiAgICAgIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9zdGltZm9ybWF0KQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uIDwtCiAgICAgIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uKQpgYGAKCkluIHRoZSBBTk9WQSBvbiBGYW1pbGlhcml0eSBoaXRzLCB0aGVyZSB3YXMgYWdhaW4gYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpLWZvcm1hdCwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdCRmdWxsJFN0aW11bGlGb3JtYXRgOyAgd29yZHMgKGByIGV4cDFfX3dvcmRzX3Byb3BfZmFtX2hpdF9tZWFuYCkgcmVzdWx0ZWQgaW4gYSBoaWdoZXIgcHJvcG9ydGlvbiBvZiBmYW1pbGlhcml0eSBoaXRzIHRoYW4gcGljdHVyZXMgKGByIGV4cDFfX3BpY3NfcHJvcF9mYW1faGl0X21lYW5gKSwgYHIgZXhwMV9fcGljc193b3Jkc19mYW1faGl0X3R0ZXN0YCwgaW5kaWNhdGluZyB0aGF0IC0gd2hlbiBjb3JyZWN0bHkgcmVjb2duaXNlZCAtIHdvcmRzIHdlcmUgbm90IHJlY29nbmlzZWQgaW4gdGhlIHRoZSBzYW1lIGNvbnRleHQtcmljaCBuYXR1cmUgYXMgcGljdHVyZXMuIFRoZXJlIHdhcyBhbHNvIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgcmVzcG9uc2Utb3B0aW9uLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0JGZ1bGwkUmVzcG9uc2VPcHRpb25gLCB3aXRoIHRoZSBSRi1yYXRpbmdzIGdyb3VwIChgciBleHAxX19yZnJfZmFtX2hpdF9tZWFuYCkgc2hvd2luZyBtb3JlIEZhbWlsaWFyaXR5IGhpdHMgdGhhbiBib3RoIHRoZSBSRkctZ3JvdXAgKGByIGV4cDFfX3JmZ19mYW1faGl0X21lYW5gKSwgYHIgZXhwMV9fcmZnX3Jmcl9mYW1faGl0X3R0ZXN0YCwgYW5kIHRoZSBSRkJHLWdyb3VwIChgciBleHAxX19yZmJnX2ZhbV9oaXRfbWVhbmApLCBgciBleHAxX19yZmJnX3Jmcl9mYW1faGl0X3R0ZXN0YC4gVGhlIFJGQkctZ3JvdXAgKGByIGV4cDFfX3JmYmdfZmFtX2hpdF9tZWFuYCkgYWxzbyBzaG93ZWQgc2lnbmlmaWNhbnRseSBtb3JlIEZhbWlsaWFyaXR5IGhpdHMgY29tcGFyZWQgd2l0aCB0aGUgUkZHLWdyb3VwIChgciBleHAxX19yZmdfZmFtX2hpdF9tZWFuYCksIGByIGV4cDFfX3JmZ19yZmJnX2ZhbV9oaXRfdHRlc3RgCgpUaGVyZSB3YXMgYWxzbyBhIHNpZ25pZmljYW50IGludGVyYWN0aW9uLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0JGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdGAgKHNlZSBgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAxX19mYW1faGl0X2ludGVyYWN0aW9uX2ZpZ3VyZV9jYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKS4gV2l0aGluIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb25zLCB3b3JkcyByZXN1bHRlZCBpbiBtb3JlIEZhbWlsaWFyaXR5IGhpdHMgdGhhbiBwaWN0dXJlcyBpbiBib3RoIHRoZSBSRkcgZ3JvdXAgKHdvcmRzOiBgciBleHAxX19yZmdfd29yZHNfZmFtX2hpdF9tZWFuYDsgcGljdHVyZXM6IGByIGV4cDFfX3JmZ19waWNzX2ZhbV9oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQkc3RhdGlzdGljJFJGR19Xb3Jkc19QaWN0dXJlc2A7IGFuZCBSRkJHIGdyb3VwICh3b3JkczogYHIgZXhwMV9fcmZiZ193b3Jkc19mYW1faGl0X21lYW5gOyBwaWN0dXJlczogYHIgZXhwMV9fcmZiZ19waWNzX2ZhbV9oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQkc3RhdGlzdGljJFJGQkdfV29yZHNfUGljdHVyZXNgLiBDb252ZXJzZWx5LCB0aGUgUkYtUmF0aW5ncyBncm91cCBzaG93ZWQgdGhlIG9wcG9zaXRlIHBhdHRlcm4sIHdpdGggbW9yZSBGYW1pbGlhcml0eSBoaXRzIHByb2R1Y2VkIGZvciBwaWN0dXJlcyAoYHIgZXhwMV9fcmZyX3BpY3NfZmFtX2hpdF9tZWFuYCkgdGhhbiB3b3JkcyAoYHIgZXhwMV9fcmZyX3dvcmRzX2ZhbV9oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQkc3RhdGlzdGljJFJGX1JhdGluZ3NfV29yZHNfUGljdHVyZXNgLiAKCkJldHdlZW4gcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbnMsIHdvcmQgc3RpbXVsaSBwcm9kdWNlZCBzaWduaWZpY2FudGx5IG1vcmUgRmFtaWxpYXJpdHkgaGl0cyBpbiB0aGUgUkYtUmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX3dvcmRzX2ZhbV9oaXRfbWVhbmApIGNvbXBhcmVkIHRvdGhlIFJGRyBncm91cCAoYHIgZXhwMV9fcmZnX3dvcmRzX2ZhbV9oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1faGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3Jlc3BvcHRpb24kc3RhdGlzdGljJFdvcmRzX1JGR19SRl9SYXRpbmdzYC4gRm9yIHBpY3R1cmVzLCBhIGhpZ2hlciBudW1iZXIgb2YgRmFtaWxpYXJpdHkgaGl0cyB3YXMgZXZpZGVudCBpbiB0aGUgUkYtUmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX3BpY3NfZmFtX2hpdF9tZWFuYCkgY29tcGFyZWQgdG8gYm90aCB0aGUgUkZHIGdyb3VwIChgciBleHAxX19yZmdfcGljc19mYW1faGl0X21lYW5gKSwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uJHN0YXRpc3RpYyRQaWN0dXJlc19SRkdfUkZfUmF0aW5nc2AgYW5kIFJGQkcgZ3JvdXAgKGByIGV4cDFfX3JmYmdfcGljc19mYW1faGl0X21lYW5gKSwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uJHN0YXRpc3RpYyRQaWN0dXJlc19SRkJHX1JGX1JhdGluZ3NgLiBUaGUgUkZCRyBncm91cCAoYHIgZXhwMV9fcmZiZ19waWNzX2ZhbV9oaXRfbWVhbmApIGFsc28gc2hvd2VkIGEgc2lnbmlmaWNhbnRseSBoaWdoZXIgbnVtYmVyIG9mIEZhbWlsaWFyaXR5IGhpdHMgY29tcGFyZWQgdG8gdGhlIFJGRyBncm91cCAoYHIgZXhwMV9fcmZnX3BpY3NfZmFtX2hpdF9tZWFuYCksIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbiRzdGF0aXN0aWMkUGljdHVyZXNfUkZHX1JGQkdgLiBDbGljayBoZXJlIHRvIHNlZSBvdXRwdXQ6IFtBcHBlbmRpeCBHIC0gQU5PVkEgRmFtIGhpdHNdW10uICAKCiZuYnNwOwoKYGBge3IgZWNobz1GQUxTRSwgcmVzdWx0cyA9IEZBTFNFLCBjYWNoZT1GQUxTRX0KICAgIGZpZ3VyZV9udW1iZXJpbmcoImV4cDFfX2ZhbV9oaXRfaW50ZXJhY3Rpb25fZmlndXJlX2NhcHRpb24iLCAiSW50ZXJhY3Rpb24gcGxvdCAKICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiBzdGltdWxpLWZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbiBmb3IgdGhlIAogICAgICAgICAgICAgICAgICAgICBtZWFuIHByb3BvcnRpb24gb2YgaGl0cyBhc3NpZ25lZCAnRmFtaWxpYXJpdHknLiIsIAogICAgICAgICAgICAgICAgICAgICBkaXNwbGF5ID0gRkFMU0UpCmBgYAoKYGBge3IgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9NS41LCBlY2hvPUZBTFNFfQogICAgZXhwMV9fZmFtX2hpdF9pbnRlcmFjdGlvbl9maWd1cmUKYGBgCmByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDFfX2ZhbV9oaXRfaW50ZXJhY3Rpb25fZmlndXJlX2NhcHRpb24iKWAKCgojIyMgR3Vlc3NpbmcgIAoKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBHdWVzc2luZyBoaXRzOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0IDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdCkKCiMjICBNYWluIGVmZmVjdHM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXQkZnVsbCRTdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdCRmdWxsJFN0aW11bGlGb3JtYXQgJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0JGZ1bGwkUmVzcG9uc2VPcHRpb24gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0JGZ1bGwkUmVzcG9uc2VPcHRpb24gJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0JGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdCAlPiUKICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogIAojIyAgUGFpcndpc2UgKHN0aW0tZm9ybWF0KToKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19oaXRfc3RpbV9mb3JtYXRfbW1lYW5zKQogICAgZXhwMV9fcGljc19wcm9wX2d1ZXNzX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9zdGltX2Zvcm1hdF9tbWVhbnMkZXN0aW1hdGUkUGljdHVyZXMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3dvcmRzX3Byb3BfZ3Vlc3NfaGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X21tZWFucyRlc3RpbWF0ZSRXb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlKQogICAgZXhwMV9fcGljc193b3Jkc19ndWVzc19oaXRfdHRlc3QgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3N0aW1fZm9ybWF0X3BhaXJ3aXNlJGZ1bGwgJT4lCiAgICAgIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCiAgCiMjICBQYWlyd2lzZSAocmVzcC1vcHRpb24pOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X3Jlc3Bfb3B0aW9uX21tZWFucyA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9yZXNwX29wdGlvbl9tbWVhbnMpCiAgIGV4cDFfX3JmZ19ndWVzc19oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGRyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZiZ19ndWVzc19oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGQkcgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3Jmcl9ndWVzc19oaXRfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGX1JhdGluZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSkKICAgIAogICAgZXhwMV9fcmZnX3JmYmdfZ3Vlc3NfaGl0X3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGR19SRkJHICU+JQogICAgICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQogICBleHAxX19yZmdfcmZyX2d1ZXNzX2hpdF90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fcGFpcndpc2UkZnVsbCRSRkdfUkZfUmF0aW5ncyAlPiUKICAgICAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKICAgIGV4cDFfX3JmYmdfcmZyX2d1ZXNzX2hpdF90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfcmVzcF9vcHRpb25fcGFpcndpc2UkZnVsbCRSRkJHX1JGX1JhdGluZ3MgJT4lCiAgICAgIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpICAKCiMjICBQYWlyd2lzZSAoaW50ZXJhY3Rpb24pOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX21tZWFucyA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMpCiAgICBleHAxX19yZmdfd29yZHNfZ3Vlc3NfaGl0X21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX21tZWFucyRlc3RpbWF0ZSRSRkdfV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3JmZ19waWNzX2d1ZXNzX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZHX1BpY3R1cmVzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZmJnX3dvcmRzX2d1ZXNzX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZCR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZiZ19waWNzX2d1ZXNzX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZCR19QaWN0dXJlcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZyX3dvcmRzX2d1ZXNzX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZfUmF0aW5nc19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogIGV4cDFfX3Jmcl9waWNzX2d1ZXNzX2hpdF9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZfUmF0aW5nc19QaWN0dXJlcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9zdGltZm9ybWF0IDwtCiAgICAgIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3N0aW1mb3JtYXQpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbiA8LQogICAgICBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uKQpgYGAKClRoZSBBTk9WQSBvbiBHdWVzc2luZyBoaXRzIGFnYWluIHNob3dlZCBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHN0aW11bGktZm9ybWF0LCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXQkZnVsbCRTdGltdWxpRm9ybWF0YCwgd2l0aCB3b3JkcyAoYHIgZXhwMV9fd29yZHNfcHJvcF9ndWVzc19oaXRfbWVhbmApIHNob3dpbmcgbW9yZSBHdWVzc2luZyBoaXRzIHRoYW4gcGljdHVyZXMgKGByIGV4cDFfX3BpY3NfcHJvcF9ndWVzc19oaXRfbWVhbmApLCBgciBleHAxX19waWNzX3dvcmRzX2d1ZXNzX2hpdF90dGVzdGAgLSBhIGZpbmRpbmcgdGhhdCBhbGlnbnMgd2l0aCB0aGUgcmVzdWx0cyBmb3IgaGl0cyBhc3NpZ25lZCBSZWNvbGxlY3Rpb24gYW5kIEZhbWlsaWFyaXR5LCB3aGVyZWJ5IHdvcmRzIGFwcGVhciB0byBub3QgYmUgcmVjb2duaXNlZCBpbiB0aGUgdGhlIHNhbWUgY29udGV4dC1yaWNoIG5hdHVyZSBhcyBwaWN0dXJlcy4gVGhlcmUgd2FzIGFsc28gYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiByZXNwb25zZS1vcHRpb24sIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdCRmdWxsJFJlc3BvbnNlT3B0aW9uYCwgd2l0aCB0aGUgUkYtUmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX2d1ZXNzX2hpdF9tZWFuYCkgc2hvd2luZyBzaWduaWZpY2FudGx5IGZld2VyIEd1ZXNzaW5nIGhpdHMgdGhhbiBib3RoIHRoZSBSRkcgKGByIGV4cDFfX3JmZ19ndWVzc19oaXRfbWVhbmApLCBgciBleHAxX19yZmdfcmZyX2d1ZXNzX2hpdF90dGVzdGAsIGFuZCBSRkJHIChgciBleHAxX19yZmJnX2d1ZXNzX2hpdF9tZWFuYCkgZ3JvdXBzLCBgciBleHAxX19yZmJnX3Jmcl9ndWVzc19oaXRfdHRlc3RgLiBEZXNwaXRlICdHdWVzc2luZycgcmVzcG9uc2VzIGJlaW5nIHBlcm1pc3NhYmxlIGluIGFueSBvZiB0aGUgcmVzcG9uc2Utb3B0aW9uIGdyb3VwcywgaXQgc2VlbXMgd2hlbiB0d28gaW5kZXBlbmRlbnQgcmF0aW5nIHNjYWxlcyB3ZXJlIHJlcXVpcmVkIHBhcnRpY2lwYW50cyB3ZXJlIGxlc3MgbGlrZWx5IHRvIHJlcG9ydCBhICJHdWVzcyIuIFRoaXMgY291bGQgYmUgYmVjYXVzZSB0aG9zZSBpbiB0aGUgUkYtUmF0aW5ncyBjb25kaXRpb24gc2VsZWN0ZWQgIk5ldyIgbW9yZSBvZnRlbiB0aGFuICJPbGQiIHdoZW4gdGhleSB3ZXJlIGhhdmluZyBhIGNvbXBsZXRlIGd1ZXNzLCBvciBpbnN0ZWFkLCBzdWJqZWN0cyBtaWdodCBoYXZlIG9wdGVkIHRvIHJlcG9ydCBsb3dlciBsZXZlbHMgb2YgUmVjb2xsZWN0aW9uIGFuZCBGYW1pbGlhcml0eSByYXRpbmdzIChpLmUuLCAxLTMpLCByYXRoZXIgdGhhbiByZXNwb25kaW5nIDAgb24gYm90aCBzY2FsZXMuIAoKVGhlcmUgd2FzIGFsc28gYSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbixgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXQkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0YCwgKHNlZSBgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAxX19ndWVzc19oaXRfaW50ZXJhY3Rpb25fZmlndXJlX2NhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWApLiBXaXRoaW4gcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbnMsIHdvcmRzIHJlc3VsdGVkIGluIG1vcmUgR3Vlc3NpbmcgaGl0cyB0aGFuIHBpY3R1cmVzIGluIGJvdGggdGhlIFJGRyBncm91cCAod29yZHM6IGByIGV4cDFfX3JmZ193b3Jkc19ndWVzc19oaXRfbWVhbmA7IHBpY3R1cmVzOiBgciBleHAxX19yZmdfcGljc19ndWVzc19oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2Vfc3RpbWZvcm1hdCRzdGF0aXN0aWMkUkZHX1dvcmRzX1BpY3R1cmVzYDsgYW5kIFJGQkcgZ3JvdXAgKHdvcmRzOiBgciBleHAxX19yZmJnX3dvcmRzX2d1ZXNzX2hpdF9tZWFuYDsgcGljdHVyZXM6IGByIGV4cDFfX3JmYmdfcGljc19ndWVzc19oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2Vfc3RpbWZvcm1hdCRzdGF0aXN0aWMkUkZCR19Xb3Jkc19QaWN0dXJlc2AuIAoKQmV0d2VlbiByZXNwb25zZS1vcHRpb24gY29uZGl0aW9ucywgd29yZCBzdGltdWxpIHByb2R1Y2VkIHNpZ25pZmljYW50bHkgZmV3ZXIgR3Vlc3NpbmcgaGl0cyBpbiB0aGUgUkYtUmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX3dvcmRzX2d1ZXNzX2hpdF9tZWFuYCkgY29tcGFyZWQgdG8gYm90aCB0aGUgUkZHIGdyb3VwIChgciBleHAxX19yZmdfd29yZHNfZ3Vlc3NfaGl0X21lYW5gKSwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX3BhaXJ3aXNlX3Jlc3BvcHRpb24kc3RhdGlzdGljJFdvcmRzX1JGR19SRl9SYXRpbmdzYCwgYW5kIHRoZSBSRkJHIGdyb3VwIChgciBleHAxX19yZmJnX3dvcmRzX2d1ZXNzX2hpdF9tZWFuYCksIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uJHN0YXRpc3RpYyRXb3Jkc19SRkJHX1JGX1JhdGluZ3NgLiBBIHNpbWlsYXIgcGF0dGVybiB3YXMgYWxzbyBldmlkZW50IGZvciBwaWN0dXJlcywgd2l0aCBzaWduaWZpY2FudGx5ZmV3ZXIgb2YgR3Vlc3NpbmcgaGl0cyBpbiB0aGUgUkYtUmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX3BpY3NfZ3Vlc3NfaGl0X21lYW5gKSBjb21wYXJlZCB0byBib3RoIHRoZSBSRkcgZ3JvdXAgKGByIGV4cDFfX3JmZ19waWNzX2d1ZXNzX2hpdF9tZWFuYCksIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX2hpdF9pbnRlcmFjdGlvbl9wYWlyd2lzZV9yZXNwb3B0aW9uJHN0YXRpc3RpYyRQaWN0dXJlc19SRkdfUkZfUmF0aW5nc2AgYW5kIFJGQkcgZ3JvdXAgKGByIGV4cDFfX3JmYmdfcGljc19ndWVzc19oaXRfbWVhbmApLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19oaXRfaW50ZXJhY3Rpb25fcGFpcndpc2VfcmVzcG9wdGlvbiRzdGF0aXN0aWMkUGljdHVyZXNfUkZCR19SRl9SYXRpbmdzYC4gQ2xpY2sgaGVyZSB0byBzZWUgb3V0cHV0OiBbQXBwZW5kaXggSCAtIEFOT1ZBIGd1ZXNzIGhpdHNdW10uCgpgYGB7ciBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgZmlndXJlX251bWJlcmluZygiZXhwMV9fZ3Vlc3NfaGl0X2ludGVyYWN0aW9uX2ZpZ3VyZV9jYXB0aW9uIiwgIkludGVyYWN0aW9uIHBsb3QKICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiBzdGltdWxpLWZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbiBmb3IgdGhlIAogICAgICAgICAgICAgICAgICAgICBtZWFuIHByb3BvcnRpb24gb2YgaGl0cyBhc3NpZ25lZCAnR3Vlc3NpbmcnLiIsIGRpc3BsYXkgPSBGQUxTRSkKYGBgCgpgYGB7ciBmaWcud2lkdGg9NywgZmlnLmhlaWdodD01LjUsIGVjaG89RkFMU0V9CiAgICBleHAxX19ndWVzc19oaXRfaW50ZXJhY3Rpb25fZmlndXJlCmBgYApgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAxX19ndWVzc19oaXRfaW50ZXJhY3Rpb25fZmlndXJlX2NhcHRpb24iKWAKCiMjIEZhbHNlIGFsYXJtcyAoRkFzKSBhc3NpZ25lZCBSZWNvbGxlY3Rpb24sIEZhbWlsaWFyaXR5LCBhbmQgR3Vlc3NpbmcKVG8gZGV0ZXJtaW5lIHRoZSBlZmZlY3RzIG9mIHN0aW11bGktZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gb24gZmFsc2UgcmVjb2duaXRpb24gbWVtb3J5IGp1ZGdtZW50cywgc2VwYXJhdGUgMiAoc3RpbXVsaSBmb3JtYXQ6IHdvcmRzLCBwaWN0dXJlcykgeCAzIChyZXNwb25zZS1vcHRpb24gY29uZGl0aW9uOiBSRkctanVkZ21lbnRzLCBSRkJHLWp1ZGdtZW50cywgUkYtcmF0aW5ncykgbWl4ZWQgQU5PVkFzIHdlcmUgY29uZHVjdGVkIG9uIHRoZSBtZWFuIHByb3BvcnRpb24gb2YgRkFzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgRmFtaWxpYXJpdHksIGFuZCBHdWVzc2luZyAoc2VlIGByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDFfX3Byb3BfRkFfY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuIAoKJm5ic3A7CgpgYGB7ciBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgZmlndXJlX251bWJlcmluZygiZXhwMV9fcHJvcF9GQV9jYXB0aW9uIiwgIlByb3BvcnRpb24gb2YgRkFzIGFzc2lnbmVkIAogICAgICAgICAgICAgICAgICAgICBSZWNvbGxlY3Rpb24sIEZhbWlsaWFyaXR5LCBhbmQgR3Vlc3NpbmcsIGJ5IHN0aW11bGktZm9ybWF0IGFuZCAKICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbi4iLCBkaXNwbGF5ID0gRkFMU0UpCmBgYAoKYGBge3IgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9NS41LCBlY2hvPUZBTFNFfQogICAgZXhwMV9fRkFfZmlndXJlCmBgYApgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAxX19wcm9wX0ZBX2NhcHRpb24iKWAKCgojIyMgUmVjb2xsZWN0aW9uIChGQXMpCgpgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KIyMgIFJlYyBGQXM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkEgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBKQoKIyMgIE1haW4gZWZmZWN0czoKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19GQSRmdWxsJFN0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX0ZBJGZ1bGwkU3RpbXVsaUZvcm1hdCAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkEkZnVsbCRSZXNwb25zZU9wdGlvbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkEkZnVsbCRSZXNwb25zZU9wdGlvbiAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkEkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19GQSRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQoKIyMgIFBhaXJ3aXNlIChyZXNwLW9wdGlvbik6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkFfcmVzcF9vcHRpb25fbW1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfcmVjX0ZBX3Jlc3Bfb3B0aW9uX21tZWFucykKICAgIGV4cDFfX3JmZ19yZWNfRkFfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkFfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGRyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZiZ19yZWNfRkFfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkFfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGQkcgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX3Jmcl9yZWNfRkFfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkFfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGX1JhdGluZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSA8LSBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAxX19hbm92YV9wcm9wX3JlY19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSkKICAgIAogICAgZXhwMV9fcmZnX3JmYmdfcmVjX0ZBX3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGR19SRkJHICU+JQogICAgICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKSAgIyBULXRlc3QuCiAgICBleHAxX19yZmdfcmZyX3JlY19GQV90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkFfcmVzcF9vcHRpb25fcGFpcndpc2UkZnVsbCRSRkdfUkZfUmF0aW5ncyAlPiUKICAgICAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKICAgIGV4cDFfX3JmYmdfcmZyX3JlY19GQV90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9yZWNfRkFfcmVzcF9vcHRpb25fcGFpcndpc2UkZnVsbCRSRkJHX1JGX1JhdGluZ3MgJT4lCiAgICAgIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmBgYAoKSW4gdGhlIEFOT1ZBIG9uIFJlY29sbGVjdGlvbiBGQXMsIHRoZXJlIHdhcyBubyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpLWZvcm1hdCwgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX0ZBJGZ1bGwkU3RpbXVsaUZvcm1hdGAsIGJ1dCB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiByZXNwb25zZS1vcHRpb24sIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX3JlY19GQSRmdWxsJFJlc3BvbnNlT3B0aW9uYCwgd2l0aCB0aG9zZSBpbiB0aGUgUkYtcmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX3JlY19GQV9tZWFuYCkgc2hvd2luZyBtb3JlIFJlY29sbGVjdGlvbiBGQXMgdGhhbiBib3RoIHRoZSBSRkctZ3JvdXAgKGByIGV4cDFfX3JmZ19yZWNfRkFfbWVhbmApLCBgciBleHAxX19yZmdfcmZyX3JlY19GQV90dGVzdGAsIGFuZCB0aGUgUkZCRy1ncm91cCAoYHIgZXhwMV9fcmZiZ19yZWNfRkFfbWVhbmApLCBgciBleHAxX19yZmJnX3Jmcl9yZWNfRkFfdHRlc3RgKS4gCgpUaGlzIGNvdWxkIGluZGljYXRlIHRoYXQgd2hlbiBzdWJqZWN0cyB3ZXJlIHJlcXVpcmVkIHRvIGluZGl2aWR1YWxseSByZXBvcnQgUmVjb2xsZWN0aW9uIGFuZCBGYW1pbGlhcml0eSBvbiB0d28gMC01IHJhdGluZyBzY2FsZXMsIHRoZXkgd2VyZSBtb3JlIGxpa2VseSB0byBleHBlcmllbmNlIChvciByZXBvcnQpIGZhbHNlIHJlY29nbml0aW9uIChhY2NvbXBhbmllZCBieSBub24tZXhpc3RlbnQgY29udGV4dHVhbCBkZXRhaWxzKSB0aGFuIHdoZW4gb25seSB0aHJlZSAoUkZHKSBvciBmb3VyIChSRkJHKSByZXNwb25zZS1vcHRpb25zIHdlcmUgcHJvdmlkZWQuIFRoZXJlIHdlcmUgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gZWZmZWN0cywgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfcmVjX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdGAuCkNsaWNrIGhlcmUgdG8gc2VlIG91dHB1dDogW0FwcGVuZGl4IEkgLSBBTk9WQSBSZWMgRkFdW10uCgoKCiMjIyBGYW1pbGlhcml0eSAoRkFzKQogICAKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBGYW0gRkFzOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX0ZBIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAxX19hbm92YV9wcm9wX2ZhbV9GQSkKCiMjICBNYWluIGVmZmVjdHM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1fRkEkZnVsbCRTdGltdWxpRm9ybWF0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9GQSRmdWxsJFN0aW11bGlGb3JtYXQgJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb24gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb24gJT4lCiAgICAgIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZmFtX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb25fU3RpbXVsaUZvcm1hdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9mYW1fRkEkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKYGBgCgpUaGUgQU5PVkEgb24gRmFtaWxpYXJpdHkgRkFzIGRpZCBub3QgeWllbGQgYW55IHNpZ25pZmljYW50IHJlc3VsdHM7IHdpdGggbm8gc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaS1mb3JtYXQsIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9GQSRmdWxsJFN0aW11bGlGb3JtYXRgLCBubyBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiByZXNwb25zZS1vcHRpb24sIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9GQSRmdWxsJFJlc3BvbnNlT3B0aW9uYCwgYW5kIG5vIHNpZ25pZmljYW50IGludGVyYWN0aW9uIGVmZmVjdHMsIGByIGV4cDFfX2FwYV9hbm92YV9wcm9wX2ZhbV9GQSRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXRgLiBDbGljayBoZXJlIHRvIHNlZSBvdXRwdXQ6IFtBcHBlbmRpeCBKIC0gQU5PVkEgRmFtIEZBXVtdLgoKIyMjIEd1ZXNzaW5nIChGQXMpCgpgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KIyMgIFJlYyBGQXM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQSA8LSBwYXBhamE6OjphcGFfcHJpbnQuYWZleF9hb3YoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQSkKCiMjICBNYWluIGVmZmVjdHM6CiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQSRmdWxsJFN0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkEkZnVsbCRTdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKICAgIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX0ZBJGZ1bGwkUmVzcG9uc2VPcHRpb24gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkEkZnVsbCRSZXNwb25zZU9wdGlvbiAlPiUKICAgICAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiAgICBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQSRmdWxsJFJlc3BvbnNlT3B0aW9uX1N0aW11bGlGb3JtYXQgPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkEkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0ICU+JQogICAgICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKCiMjICBQYWlyd2lzZSAocmVzcC1vcHRpb24pOgogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfcmVzcF9vcHRpb25fbW1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDFfX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfcmVzcF9vcHRpb25fbW1lYW5zKQogICAgZXhwMV9fcmZnX2d1ZXNzX0ZBX21lYW4gPC0gZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfcmVzcF9vcHRpb25fbW1lYW5zJGVzdGltYXRlJFJGRyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fcmZiZ19ndWVzc19GQV9tZWFuIDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX0ZBX3Jlc3Bfb3B0aW9uX21tZWFucyRlc3RpbWF0ZSRSRkJHICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCiAgICBleHAxX19yZnJfZ3Vlc3NfRkFfbWVhbiA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQV9yZXNwX29wdGlvbl9tbWVhbnMkZXN0aW1hdGUkUkZfUmF0aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQogICAgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkFfcmVzcF9vcHRpb25fcGFpcndpc2UgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwMV9fYW5vdmFfcHJvcF9ndWVzc19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSkgICAgICAgICAgICAgICAKCiAgICBleHAxX19yZmdfcmZiZ19ndWVzc19GQV90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGR19SRkJHICU+JQogICAgICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKSAgIyBULXRlc3QuCiAgICBleHAxX19yZmdfcmZyX2d1ZXNzX0ZBX3R0ZXN0IDwtIGV4cDFfX2FwYV9hbm92YV9wcm9wX2d1ZXNzX0ZBX3Jlc3Bfb3B0aW9uX3BhaXJ3aXNlJGZ1bGwkUkZHX1JGX1JhdGluZ3MgJT4lCiAgICAgIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCiAgICBleHAxX19yZmJnX3Jmcl9ndWVzc19GQV90dGVzdCA8LSBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQV9yZXNwX29wdGlvbl9wYWlyd2lzZSRmdWxsJFJGQkdfUkZfUmF0aW5ncyAlPiUKICAgICAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKYGBgCgpGaW5hbGx5LCB0aGUgQU5PVkEgb24gR3Vlc3NpbmcgRkFzIGFsc28gc2hvd2VkIG5vIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHN0aW11bGktZm9ybWF0LCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQSRmdWxsJFN0aW11bGlGb3JtYXRgLCBidXQgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2YgcmVzcG9uc2Utb3B0aW9uLCBgciBleHAxX19hcGFfYW5vdmFfcHJvcF9ndWVzc19GQSRmdWxsJFJlc3BvbnNlT3B0aW9uYCwgd2l0aCB0aGUgd2l0aCB0aGUgUkYtcmF0aW5ncyBncm91cCAoYHIgZXhwMV9fcmZyX2d1ZXNzX0ZBX21lYW5gKSBzaG93aW5nIHNpZ25pZmljYW50bHkgZmV3ZXIgR3Vlc3NpbmcgRkFzIHRoYW4gYm90aCB0aGUgUkZHIChgciBleHAxX19yZmdfZ3Vlc3NfRkFfbWVhbmApLCBgciBleHAxX19yZmdfcmZyX2d1ZXNzX0ZBX3R0ZXN0YCwgYW5kIFJGQkcgZ3JvdXBzIChgciBleHAxX19yZmJnX2d1ZXNzX0ZBX21lYW5gKSwgYHIgZXhwMV9fcmZiZ19yZnJfZ3Vlc3NfRkFfdHRlc3RgLiBUaGlzIGFnYWluIGFsaWducyB3aXRoIHByZXZpb3VzIHJlc3VsdHMsIHN1Z2dlc3RpbmcgdGhhdCB0aG9zZSBpbiB0aGUgUkYtUmF0aW5ncyBncm91cCB3ZXJlIGxlc3MgbGlrZWx5IHRvIHJlcG9ydCBndWVzc2VzIHRoYW4gdGhlIG90aGVyIGdyb3Vwcywgd2hldGhlciBhY2N1cmF0ZSBvciBub3QuIFRoZXJlIHdlcmUgbm8gc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gZWZmZWN0cywgYHIgZXhwMV9fYXBhX2Fub3ZhX3Byb3BfZ3Vlc3NfRkEkZnVsbCRSZXNwb25zZU9wdGlvbl9TdGltdWxpRm9ybWF0YC4gQ2xpY2sgaGVyZSB0byBzZWUgb3V0cHV0OiBbQXBwZW5kaXggSyAtIEFOT1ZBIEd1ZXNzIEZBXVtdLgoKXG5ld3BhZ2UKIyBDaGFwdGVyIDMKIyMgRXhwZXJpbWVudCAyIChJbWFnZSBOb3JtcykKIyMgRGV2ZWxvcG1lbnQgb2YgYSBuZXcgc2V0IG9mIHN0YW5kYXJkaXNlZCBwaG90b2dyYXBoaWMgc3RpbXVsaQoKVGhlIFBpY3R1cmUgU3VwZXJpb3JpdHkgRWZmZWN0IChQU0UpIGlzIGEgaGlnaGx5IHJvYnVzdCBhbmQgcmVwbGljYWJsZSBwaGVub21lbm9uLiBJbiByZWNvZ25pdGlvbiBtZW1vcnkgcGFyYWRpZ21zLCB0aGUgUFNFIGhhcyBiZWVuIHNob3duIHRvIG1hbmlmZXN0IGFzIGJvdGggaW5jcmVhc2VkIHJlY29sbGVjdGlvbiBhbmQgZmFtaWxpYXJpdHkgW0ByYWphcmFtMTk5MzsgQHJhamFyYW0xOTk2OyBAZGV3aHVyc3QxOTk0OyBAd2FnbmVyMTk5NzsgQHlvbmVsaW5hczIwMDJdLiBUaGUgZWZmZWN0IGlzIHByZXNlbnQgaW4gY2hpbGRyZW4sIGFkb2xlc2NlbnRzIGFuZCBoZWFsdGh5IG9sZGVyIGFkdWx0cyBbQHdoaXRlaG91c2UyMDA2XSwgdGhvdWdoIHBlcmhhcHMgbW9yZSBzdHJpa2luZyBpcyB0aGUgZmFjdCB0aGF0IHBhdGllbnRzIHdpdGggQWx6aGVpbWVy4oCZcyBkaXNlYXNlIG9yIHRob3NlIHByZXNlbnRpbmcgZWFybHkgaXNvbGF0ZWQgbWVtb3J5IGltcGFpcm1lbnRzLCBrbm93biBhcyBhbW5lc3RpYyBtaWxkIGNvZ25pdGl2ZSBpbXBhaXJtZW50IChhTUNJKSwgYWxzbyBzaG93IG1lbW9yaWFsIGJlbmVmaXRzIHRvd2FyZCBwaWN0dXJlcyBbQGFsbHkyMDEyXS4gVGhpcyBpcyBzdXBwb3J0ZWQgYnkgRVJQIHN0dWRpZXMgZGVtb25zdHJhdGluZyBjb21wYXJhYmxlIGVuaGFuY2VtZW50cyB0byByZWNvbGxlY3Rpb24tYmFzZWQgRVJQIGNvbXBvbmVudHMgYmV0d2VlbiBoZWFsdGh5IG9sZGVyIGFuZCBhTUNJIGdyb3VwcyB3aGVuIHBpY3R1cmVzLCByYXRoZXIgdGhhbiB3b3JkcywgYXJlIHV0aWxpc2VkIFtAYWxseTIwMDldLiBUaGVyZSBpcyBkZWJhdGUgd2l0aGluIHRoZSBsaXRlcmF0dXJlIGF0dGVtcHRpbmcgdG8gY2hhcmFjdGVyaXNlIHRoZSBuYXR1cmUgb2YgbWVtb3J5IGRlZmljaXRzIGluIGFNQ0ksIHdoZXJlYnkgZGVzcGl0ZSBnZW5lcmFsIGFncmVlbWVudCB0aGF0IHJlY29sbGVjdGlvbiBwcm9jZXNzZXMgYXJlIGltcGFpcmVkIGluIHN1Y2ggaW5kaXZpZHVhbHMsIGZpbmRpbmdzIHNob3cgZ3JlYXQgaW5jb25zaXN0ZW5jeSB3aXRoIHJlZ2FyZCB0byBmYW1pbGlhcml0eSBbQGFsZ2FyYWJlbDIwMTI7IEBiZWxsZXZpbGxlMjAxMTsgQHBpdGFycXVlMjAxNjsgQHdvbGsyMDEzOyBAd29sazIwMTFdLiBUaGUgUFNFIG1heSBoYXZlIGJlZW4gbGFyZ2VseSBvdmVybG9va2VkIGFzIGFuIGFyZWEgZm9yIGZ1cnRoZXIgcmVzZWFyY2ggaW4gYW4gZWZmb3J0IHRvIGhlbHAgc2V0dGxlIHRoaXMgZGViYXRlLCBkZXNwaXRlIHJlY2VudCByZXZpZXdzIGhpZ2hsaWdodGluZyBtZXRob2RvbG9naWNhbCBkaWZmZXJlbmNlcyBhY3Jvc3Mgc3R1ZGllcyBhcyB0aGUgcG90ZW50aWFsIHNvdXJjZSBvZiBpbmNvbnNpc3RlbnQgZmluZGluZ3MgW0Brb2VuMjAxNDsgQG1pZ28yMDEyOyBAc2Nob2VtYWtlcjIwMTRdLiBUaGUgbGV2ZWwgYXQgd2hpY2ggc3RpbXVsaSBkaXN0aW5jdGl2ZW5lc3MgaW1wYWN0cyBzdWNjZXNzZnVsIHJlY29nbml0aW9uIGlzIGN1cnJlbnRseSB1bmNsZWFyLCBhbmQgdGhlcmUgaXMgbGl0dGxlIGNvbnNpc3RlbmN5IGFjcm9zcyBzdHVkaWVzIHdpdGggcmVnYXJkIHRvIHdoYXQgaXMgY29uc2lkZXJlZCBhICdwaWN0dXJlJy4KCk1hbnkgZXhwZXJpbWVudHMgdXRpbGlzZSBpbGx1c3RyYXRpb25zIGZvciB0aGVpciBwaWN0dXJlIHN0aW11bGkgW0B2YW5kZXJtZXVsZW4yMDEyOyBAd2VzdGVyYmVyZzIwMTM7IEB3b2xrMjAxMV0sIHdpdGggYSBzdGFuZGFyZGlzZWQgc2V0IG9mIGl0ZW1zIHB1Ymxpc2hlZCBieSBAc25vZGdyYXNzMTk4MCBhbW9uZyB0aGUgbW9zdC11c2VkIGlsbHVzdHJhdGVkIHBpY3R1cmUgc3RpbXVsaSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBtZW1vcnkgcmVzZWFyY2ggW0B3ZWxkb24xOTg3OyBAd2VsZG9uMTk4OTsgQHdhZ25lcjE5OTc7IEBtY2JyaWRlMjAwMjsgQG1hcnRpbnMyMDA2OyBAd2hpdGVob3VzZTIwMDY7IEBob2NrbGV5MjAwODsgQHNjaG1pdHRlci1lZGdlY29tYmUyMDA5OyBAdmFuZGVybWV1bGVuMjAxMjsgQGRlYXNvbjIwMTU7IEB3YW1tZXMyMDE2OyBAYmVybXVkZXotbWFyZ2FyZXR0bzIwMTg7IEBtZWFkZTIwMTldLiBUaGUgc2V0IGNvbnNpc3RzIG9mIDI2MCBsaW5lIGRyYXdpbmdzIG9mIGNvbW1vbiwgZXZlcnlkYXkgb2JqZWN0cyAoaW4gYmxhY2sgaW5rKSwgYWxvbmcgd2l0aCB0aGVpciB3cml0dGVuIHdvcmQgY291bnRlcnBhcnQgKGUuZy4gInNob2UiKS4gSXRlbXMgd2VyZSBzZWxlY3RlZCBvbiB0aGUgYmFzaXMgb2YgZXhlbXBsaWZ5aW5nIGEgbnVtYmVyIG9mIHNlbWFudGljIGNhdGVnb3JpZXMsIGluY2x1ZGluZyBhbmltYWxzLCBmdXJuaXR1cmUsIGZydWl0LCBldGMuLCBhbmQgYSByYW5nZSBvZiBub3JtYXRpdmUgZGF0YSB3YXMgY29sbGVjdGVkIGZvciBlYWNoIGl0ZW07IGluZGljZXMgb2YgbmFtaW5nIGFncmVlbWVudCwgbWVudGFsIGltYWdlcnkgYWdyZWVtZW50LCB2aXN1YWwgY29tcGxleGl0eSwgYW5kIGZhbWlsaWFyaXR5IHdlcmUgYWxsIHJlY29yZGVkIGZvciBlYWNoIGRyYXdpbmcuIFRoZSBub3JtYXRpdmUgZGF0YSBmb3IgdGhlIEBzbm9kZ3Jhc3MxOTgwIGl0ZW1zIGhhcyBiZWVuIGNvbnRpbnVhbGx5IHJldmlzaXRlZCwgd2l0aCBhIG51bWJlciBvZiBzdHVkaWVzIGdhdGhlcmluZyBjdWx0dXJhbGx5LWFwcHJvcHJpYXRlIG5vcm1zIChlLmcuIGluIFNwYW5pc2ggW0BzYW5mZWxpdTE5OTZdLCBDaGluZXNlIFtAeW9vbjIwMDRdLCBhbmQgUnVzc2lhbiBbQHRzYXBhcmluYTIwMTFdLCBhbmQgYWRkaXRpb25hbCB0ZXN0aW5nIG9mIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiByZWFjdGlvbiB0aW1lIGFuZCBuYW1pbmcgYWdyZWVtZW50IFtAc3pla2VseTIwMDNdLiBUaGVyZSBhcmUgbXVsdGlwbGUgdGhlb3JpZXMgb2Ygb2JqZWN0IHJlY29nbml0aW9uOyB0aGUgcmVjb2duaXRpb24tYnktY29tcG9uZW50cyB0aGVvcnkgcHJvcG9zZWQgYnkgQGJpZWRlcm1hbjE5ODcgaWRlbnRpZmllcyBzaGFwZSBhcyB0aGUgbW9zdCBjcnVjaWFsIGZhY3RvciBmb3Igc3VjY2Vzc2Z1bCByZWNvZ25pdGlvbiwgaW4gd2hpY2ggY2FzZSwgdGhlIG9iamVjdCBvdXRsaW5lcyBmb3VuZCBpbiB0aGUgc2V0IGJ5IEBzbm9kZ3Jhc3MxOTgwIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCBmb3IgZXhwZXJpbWVudGFsIGNvZ25pdGl2ZSByZXNlYXJjaC4gT3RoZXIgdGhlb3JpZXMsIGhvd2V2ZXIsIHBvc2l0IHRoYXQgc3VyZmFjZSBkZXRhaWxzIHN1Y2ggYXMgY29sb3VyIGFuZCB0ZXh0dXJlIGFyZSBqdXN0IGFzIGNydWNpYWwgaW4gZm9ybWluZyBvYmplY3QgcmVwcmVzZW50YXRpb25zIFtAdGFuYWthMjAwMTsgQHRhcnIxOTk4XS4gVGhlIHdpZGUtcmFuZ2luZyBhcHBsaWNhYmlsaXR5IG9mIHRoZSBAc25vZGdyYXNzMTk4MCBpdGVtcyB0aHJvdWdob3V0IGEgbnVtYmVyIG9mIGNvZ25pdGl2ZSBkaXNjaXBsaW5lcyBoYXMgbGVkIHRvIGEgbW9yZSByZWNlbnQgcmV2aXNpb24gb2YgdGhlIGl0ZW1zIGJ5IEByb3NzaW9uMjAwNC4gVGhpcyByZXZpc2lvbiBjb25zaXN0cyBvZiB0aGUgZXhhY3Qgc2FtZSBvYmplY3RzLCBkaWdpdGFsbHkgcmUtZHJhd24gdG8gaW5jbHVkZSBzdXJmYWNlIHRleHR1cmVzIGFuZCBzaGFkaW5nLiBBZGRpdGlvbmFsbHksIHRoaXMgc2V0IHByb3ZpZGVzIGdyZXlzY2FsZSBhbmQgY29sb3VyIHZlcnNpb25zIGZvciBhbGwgaXRlbXMsIGFzIG9wcG9zZWQgdG8gdGhlIGdyZXlzY2FsZS1vbmx5IGl0ZW1zIGZvdW5kIGluIHRoZSBAc25vZGdyYXNzMTk4MCBzZXQgKHNlZSBgciBmaWd1cmVfbnVtYmVyaW5nKCJzdGltLWV4YW1wbGVzLS1jYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgIGZvciBleGFtcGxlIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgQHNub2RncmFzczE5ODAgYW5kIEByb3NzaW9uMjAwNCBzdGltdWxpIHNldHMpLiBUaGUgQHJvc3Npb24yMDA0IHJldmlzaW9uIG5vdyBhcHBlYXJzIHRvIGJlIGZhdm91cmVkIG92ZXIgdGhlIG9yaWdpbmFsIEBzbm9kZ3Jhc3MxOTgwIHNldCBhbW9uZyBtYW55IGNvZ25pdGl2ZSByZXNlYXJjaGVycyBbQHN0ZW5iZXJnMjAwNjsgQHdvbGsyMDA4OyBAcm9sbGluczIwMTgsIEBlbnNvcjIwMTldLCBhbG1vc3QgY2VydGFpbmx5IGF0dHJpYnV0YWJsZSB0byB0aGUgaW5jcmVhc2VkIGRldGFpbCBhbmQgYWJpbGl0eSB0byBjaG9vc2Ugd2hldGhlciBjb2xvdXIgaXMgYSBuZWNlc3NhcnkgY29uZGl0aW9uLgoKRGVzcGl0ZSB0aGVpciB3aWRlc3ByZWFkIHVzZSwgbGluZSBkcmF3aW5ncyBoYXZlIGJlZW4gY3JpdGljaXNlZCBmb3IgdGhlaXIgcmVsYXRpdmUgc2ltcGxpY2l0eSBhbmQgbGFjayBvZiByZWFsaXNtIChAdmlnZ2lhbm8yMDA0KSwgd2l0aCBtYW55IHJlc2VhcmNoZXJzIGZhdm91cmluZyB0aGUgdXNlIG9mIHBob3RvZ3JhcGhzIGFzIGV4cGVyaW1lbnRhbCBzdGltdWxpIFtAZW1icmVlMjAxMjsgQHBpdGFycXVlMjAxNjsgQHRyb3llcjIwMTI7IEB0cm95ZXIyMDE2OyBAd2FuZzIwMTNhXS4gUGhvdG9ncmFwaHMgb2YgZmFjZXMgYXJlIGVzcGVjaWFsbHkgdXNlZnVsIGluIHJlc2VhcmNoIGV4YW1pbmluZyBlbW90aW9uIGFuZCBmYWNlIHJlY29nbml0aW9uIFtAYm93ZW4yMDE5OyBAY3VpMjAxNjsgQGhlcnptYW5uMjAxODsgQGJhcmJhMTk5N10sIHRob3VnaCBhIG51bWJlciBvZiBjb21tb24tb2JqZWN0IHBob3RvZ3JhcGggc2V0cyBoYXZlIGFsc28gZW1lcmdlZCBhcyBlY29sb2dpY2FsIGFsdGVybmF0aXZlcyB0byBsaW5lLWRyYXduIGl0ZW1zIFtAdmlnZ2lhbm8yMDA0OyBAbW9yZW5vLW1hcnRpbmV6MjAxMjsgQGFkbGluZ3RvbjIwMDldLiBXaGlsZSB0aGUgcHVibGlzaGVkIHNldHMgb2YgcGhvdG9ncmFwaHMgYXJlIHVuZG91YnRlZGx5IHVzZWZ1bCBpbiBhIHJhbmdlIG9mIGNvZ25pdGl2ZSBkb21haW5zLCB0aGV5IGRvIG5vdCBhbGxvdyB1cyB0byBzcGVjaWZpY2FsbHkgZXhhbWluZSBzdGltdWxpIGZvcm1hdCBhcyBhIGZhY3RvciBvbiBpdHMgb3duLCBhcyB0aGUgY29uY2VwdHMgZGVwaWN0ZWQgYXJlIHVuaXF1ZSB0byB0aGUgc2V0IHRoZXkgZGVyaXZlIGZyb20uIEluIG9yZGVyIHRvIG1ha2Ugc3VjaCBjb21wYXJpc29ucywgYW5kIGVuc3VyZSBhbnkgZGlmZmVyZW5jZXMgaW4gcGVyZm9ybWFuY2UgKGUuZy4gcmVjb2duaXRpb24gbWVtb3J5IGFiaWxpdHkpIGFyZSBpbmRlZWQgYXR0cmlidXRhYmxlIHRvIHN0aW11bGkgZm9ybWF0LCB0aGUgb2JqZWN0cyBkZXBpY3RlZCBtdXN0IGJlIGNvbnNpc3RlbnQgYWNyb3NzIHN0aW11bGkgZm9ybWF0cy4gVGhlIGN1cnJlbnQgc3R1ZHkgcHJlc2VudHMgYSBuZXcgc2V0IG9mIHBob3RvZ3JhcGhpYyBzdGltdWxpIHRoYXQgZXh0ZW5kIHRoZSBzZXQgb2Ygd29yZHMgYW5kIGRyYXdpbmdzIHByb3ZpZGVkIGJ5IEByb3NzaW9uMjAwNCwgd2hlcmVpbiBlYWNoIG9mIHRoZSBjb25jZXB0cyBkZXBpY3RlZCBoYXMgYmVlbiBjYXJlZnVsbHkgbWF0Y2hlZCBhY3Jvc3MgZm9ybWF0cy4gVGhlc2UgbmV3IHN0aW11bGkgd2lsbCBiZSB1dGlsaXNlZCB0aHJvdWdob3V0IGEgbnVtYmVyIG9mIHBsYW5uZWQgcmVjb2duaXRpb24gZXhwZXJpbWVudHMgdGhhdCBhaW0gdG8gc3lzdGVtYXRpY2FsbHkgY29tcGFyZSBtZWFzdXJlcyBvZiByZWNvZ25pdGlvbiBhZ2FpbnN0IGRpZmZlcmVudCDigJhsZXZlbHPigJkgb2Ygc3RpbXVsaS4gVGhlIGN1cmF0aW9uIG9mIGEgbmV3IHNldCBvZiBwaG90b2dyYXBocyAtIGNhcmVmdWxseSBtYXRjaGVkIHRvIG90aGVyIGZvcm1hdHMgLSBhbGxvd3MgaW52ZXN0aWdhdGlvbiBpbnRvIHdoZXRoZXIgcGljdHVyZSBzdXBlcmlvcml0eSBtYWduaXR1ZGVzIGFyZSBtZWRpYXRlZCBieSB0aGUgZm9ybWF0IHBpY3R1cmVzIGFyZSBwcmVzZW50ZWQgaW4uIFRoZSBpbmNvbnNpc3RlbnQgdXNlIG9mIGRpZmZlcmVudCBmb3JtYXRzIGFjcm9zcyBzdHVkaWVzIGhhcyBwcmV2aW91c2x5IG1hZGUgaXQgZGlmZmljdWx0IHRvIHJlY29uY2lsZSBlZmZlY3RzIG9idGFpbmVkIGluIHJlc3BvbnNlIHRvIGRyYXdpbmdzIHdpdGggdGhvc2Ugb2J0YWluZWQgaW4gcmVzcG9uc2UgdG8gcGhvdG9ncmFwaHMgLSBhbiBpbmhlcmVudCBwcm9ibGVtIHdoZW4gY29uY2VwdHMgYXJlIG5vdCBtYXRjaGVkIGFjcm9zcyBmb3JtYXQuIE5vcm1hdGl2ZSBkYXRhIGZvciB0aGUgbmV3IHNldCBvZiBwaG90b2dyYXBocyBpcyBhbHNvIHByZXNlbnRlZCwgYWxsb3dpbmcgb3RoZXJzIHdobyBhbHNvIHdpc2ggdG8gdXNlIG91ciBwaG90b2dyYXBoIHN0aW11bGkgdG8gZmlsdGVyIGl0ZW1zIGJ5IG1lYXN1cmVzIG9mIG5hbWluZyBhZ3JlZW1lbnQsIG1lbnRhbCBpbWFnZXJ5IGFncmVlbWVudCwgZmFtaWxpYXJpdHksIHZpc3VhbCBjb21wbGV4aXR5LCBhbmQgY29sb3VyIGRpYWdub3N0aWNpdHkuIAoKYGBge3IgZXhwZXJpbWVudC0yLW1haW4sIGluY2x1ZGU9RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGU9VFJVRX0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRVhQRVJJTUVOVCAyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIGV4cDJfX3Jhd19kYXRhX2ZpbGVzIDwtIGxpc3QuZmlsZXMocGF0aCA9ICIuL3Jlc291cmNlcy9leHBlcmltZW50XzIvZXhwZXJpbWVudF8yX2RhdGEvIikKIyMgIENyZWF0ZSAnZG8gbm90IGltcG9ydCcgbGlzdDogCiAgICBleHAyX19kb19ub3RfaW1wb3J0IDwtCiMjICBFeHBlcmltZW50ZXIgdGVzdCBmaWxlczogCiAgICAgICAgYygiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA4LTMxXzE3aDI0LjU4LjQ0OC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDVfMjAxOS0wOC0zMV8xM2g1MC41Ny4yMjYuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA1XzIwMTktMDgtMzFfMDloMzUuNDYuNjg1LmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNF8yMDE5LTA4LTMwXzIwaDA1LjI0LjAwOS5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDRfMjAxOS0wOC0zMF8xN2gzMC4zNy41NzAuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA0XzIwMTktMDgtMzBfMTNoMzYuMzMuNDkzLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwM18yMDE5LTA4LTI5XzE0aDA5LjQ1LjYyOC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDNfMjAxOS0wOC0yOV8wN2gzNi4zOC41ODguY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDAzXzIwMTktMDgtMjhfMjBoMzcuMTkuNDIxLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwM18yMDE5LTA4LTI4XzE4aDE0LjQyLjM3MC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDJfMjAxOS0wOC0yOF8xNGgwOS4zNC42OTcuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDAyXzIwMTktMDgtMjhfMTBoMTAuMTQuMDcyLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwMl8yMDE5LTA4LTI3XzE1aDU3LjA4LjM4OC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDFfMjAxOS0wOC0yN18xMGg0OC4zMi4yNTIuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDAxXzIwMTktMDgtMjZfMTJoMTIuMjYuNzUzLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNV8yMDE5LTA4LTMwXzIxaDA3LjI4LjI2OC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDJfMjAxOS0wOC0yOF8wOGgyMi4xNC4zNjkuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMTZoMTMuMDQuOTgwLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwMl8yMDE5LTExLTIyXzA5aDI3LjM3Ljk5NC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOS0yN18xNmgwOS41My41OTEuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMTZoMDMuMjIuMjI5LmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA5LTI3XzE1aDQzLjA3LjE5MS5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOS0yN18xNWg0MC4wMy44ODEuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMTVoMzUuNDIuMDgwLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA5LTI3XzE0aDU3LjM1LjA1My5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOS0yN18xNGg1My4xOS4wOTEuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMTRoNDguMjcuODIzLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA5LTI3XzE0aDMzLjU0LjUxNS5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOS0yN18xNGgwMy4wOS43MTkuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMTNoMjIuMjIuNzAyLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA5LTI3XzEyaDUyLjM0Ljc2MS5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOS0yN18xMmg0Ny4zNC41MTIuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMTJoNDMuMDYuMjQ0LmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA5LTI3XzEyaDQwLjM1LjIxMS5jc3YiLAojIyAgRW1wdHkgLyBpbmNvbXBsZXRlIGRhdGEgKG5vdCBldmVuIGEgc2luZ2xlIGJsb2NrIGZ1bGx5IGNvbXBsZXRlZCk6CiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTEwLTAxXzA5aDE1LjE0LjUwNy5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDVfMjAxOS0wOC0zMV8xMWgxOC4yMS42MjMuY3N2IiwgICAKIyMgIEV4cGVyaW1lbnRhbCBlcnJvcjogaW1hZ2Ugc3RpbSBQIHdlcmUgcmVzcG9uZGluZyB0byBub3QgcmVjb3JkZWQ6CiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA5LTI1XzE3aDU2LjUxLjExMS5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOS0yNl8xM2gzNi4xNC4xOTQuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDktMjdfMDJoMzAuMTYuNjg5LmNzdiIsCiMjICAybmQgZGF0YXNldHMgb2YgcGFydGljaXBhbnRzIHdobyB0b29rIHBhcnQgbW9yZSB0aGFuIG9uY2U6IAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOC0zMV8yMmgxOS4zMC44MjMuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDgtMzFfMjBoMzQuMjUuMjMzLmNzdiIsICAKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDgtMzFfMTNoMTQuMTcuMjQwLmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA4LTMxXzIwaDM0LjU2LjA1NC5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDZfMjAxOS0wOC0zMV8yMGgzNC4zNy41MzAuY3N2IiwKICAgICAgICAgICJQQVJUSUNJUEFOVF9TdWJqZWN0aXZlIEp1ZGdtZW50cyBmb3IgUGhvdG9ncmFwaGljIFN0aW11bGkgLS0tIDA2XzIwMTktMDgtMzFfMTZoNTIuNDYuMzc2LmNzdiIsCiAgICAgICAgICAiUEFSVElDSVBBTlRfU3ViamVjdGl2ZSBKdWRnbWVudHMgZm9yIFBob3RvZ3JhcGhpYyBTdGltdWxpIC0tLSAwNl8yMDE5LTA4LTMxXzIwaDM0LjU2Ljg4Ny5jc3YiLAogICAgICAgICAgIlBBUlRJQ0lQQU5UX1N1YmplY3RpdmUgSnVkZ21lbnRzIGZvciBQaG90b2dyYXBoaWMgU3RpbXVsaSAtLS0gMDVfMjAxOS0wOC0zMV8xNGgyMy4zOS40MjMuY3N2IikKIyMgIFJlbW92ZSAnZG8gbm90IGltcG9ydCcgaXRlbXMgZnJvbSB0aGUgdG8tYmUtaW1wb3J0ZWQgImNzdl9maWxlX2xpc3QiLgogICAgZXhwMl9fcmF3X2RhdGFfZmlsZXMgPC0gZXhwMl9fcmF3X2RhdGFfZmlsZXNbIShleHAyX19yYXdfZGF0YV9maWxlcyAlaW4lIGV4cDJfX2RvX25vdF9pbXBvcnQpXSAlPiUKIyMgIEFkZCBmb2xkZXIgbG9jYXRpb24gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggZmlsZSBuYW1lOgogICAgICAgIHN0cl9yZXBsYWNlKCJQQVJUSUNJUEFOVCIsICIuL3Jlc291cmNlcy9leHBlcmltZW50XzIvZXhwZXJpbWVudF8yX2RhdGEvUEFSVElDSVBBTlQiKSAgICAKIyMgIENyZWF0ZSByYXcgZGYgZnJvbSB0aGUgYWJvdmUgZmlsZXMsIGJ1dCBvbmx5IGdldCB0aGUgZm9sbG93aW5nIGNvbHVtbnM6CiAgICBleHAyX19yYXdfZGF0YSA8LSBtYXBfZGZyKGV4cDJfX3Jhd19kYXRhX2ZpbGVzLH5yZWFkX2NzdigueCwgY29sX3R5cGVzID0gY29sc19vbmx5KCJkYXRlIj0nYycsImV4cE5hbWUiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgIlByb2xpZmljX0lEIj0nYycsIkFnZSI9J2MnLCJHZW5kZXIiPSdjJywiRW5nbGlzaEZpcnN0TGFuZyI9J2MnLCJFdGhuaWNpdHkiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgIkV0aG5pY2l0eU90aGVyIj0nYycsIlVzaW5nTWFjIj0nYycsIlJldGluYVNjcmVlbiI9J2MnLCJEaWRZb3VIZWFyQmVlcCI9J2MnLAogICAgICAgICAgICAgICAgICAgICAgICAiRGVicmllZl9Db21tZW50cyI9J2MnLCJCMV9fRG9Zb3VVbmRlcnN0YW5kIj0nYycsIkIyX19Eb1lvdVVuZGVyc3RhbmQiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgIkIzX19Eb1lvdVVuZGVyc3RhbmQiPSdjJywiT3JkZXIiPSdjJywiaW1hZ2VzMSI9J2MnLCJpbWFnZXMyIj0nYycsImltYWdlczMiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgImltYWdlczQiPSdjJywiaW1hZ2VzNSI9J2MnLCJpbWFnZXM2Ij0nYycsIk5hbWluZ19SZXNwb25zZSI9J2MnLCJOYW1pbmdfUlQiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgIkZhbWlsaWFyaXR5Ij0nYycsIkZhbVJlc3BfX01vdXNlLnRpbWUiPSdjJywiVmlzdWFsQ29tcGxleGl0eSI9J2MnLAogICAgICAgICAgICAgICAgICAgICAgICAiVmlzQ29tX19Nb3VzZS50aW1lIj0nYycsIkNvbG91ckRpYWdub3N0aWNpdHkiPSdjJywiQ29sRGlhX19Nb3VzZS50aW1lIj0nYycsCiAgICAgICAgICAgICAgICAgICAgICAgICJNZW50YWxJbWFnZXJ5QWdyZWVtZW50Ij0nYycsIk1lbkltYV9fTW91c2UudGltZSI9J2MnKSkpICU+JQojIyAgTWVyZ2UgY29sdW1ucyBjb250YWluaW5nIHRoZSBzYW1lIHR5cGUgb2YgZGF0YSwgYnV0IHdlcmUgb3JpZ2luYWxseSBzcGxpdCBpbnRvIGRpZmZlcmVudCBjb2x1bW5zOgogICAgICAgIHVuaXRlKHN0aW0sICAiaW1hZ2VzMSIsICJpbWFnZXMyIiwgImltYWdlczMiLCAiaW1hZ2VzNCIsICJpbWFnZXM1IiwgImltYWdlczYiLCByZW1vdmUgPSBUUlVFLAogICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkgJT4lCiAgICAgICAgcmVuYW1lX3dpdGgoLiwgdG9sb3dlcikgJT4lCiAgICAgICAgbXV0YXRlX2FsbCh0b2xvd2VyKSAlPiUKICAgICAgICByZW5hbWUoaWQgPSAicHJvbGlmaWNfaWQiLCBleHBfdmVyID0gImV4cG5hbWUiLCBmYW1fcnQgPSAiZmFtcmVzcF9fbW91c2UudGltZSIsIAogICAgICAgICAgICAgdmlzY29tX3J0ID0gInZpc2NvbV9fbW91c2UudGltZSIsIGNvbGRpYV9ydCA9ICJjb2xkaWFfX21vdXNlLnRpbWUiLCAKICAgICAgICAgICAgIG1lbmltYV9ydCA9ICJtZW5pbWFfX21vdXNlLnRpbWUiKSAlPiUKICAgICAgICBzZWxlY3QoaWQsIGRhdGUsIGV4cF92ZXIsIHVzaW5nbWFjLAlyZXRpbmFzY3JlZW4sIGFnZSwgZ2VuZGVyLCBlbmdsaXNoZmlyc3RsYW5nLCBldGhuaWNpdHksCiAgICAgICAgICAgICAgIGV0aG5pY2l0eW90aGVyLCBkaWR5b3VoZWFyYmVlcCwgZGVicmllZl9jb21tZW50cywgYjFfX2RveW91dW5kZXJzdGFuZCxiMl9fZG95b3V1bmRlcnN0YW5kLAogICAgICAgICAgICAgICBiM19fZG95b3V1bmRlcnN0YW5kLG9yZGVyLCBzdGltLCBuYW1pbmdfcmVzcG9uc2UsIGZhbWlsaWFyaXR5LCB2aXN1YWxjb21wbGV4aXR5LCAKICAgICAgICAgICAgICAgY29sb3VyZGlhZ25vc3RpY2l0eSxtZW50YWxpbWFnZXJ5YWdyZWVtZW50LCBuYW1pbmdfcnQsIGZhbV9ydCwgdmlzY29tX3J0LCBjb2xkaWFfcnQsIAogICAgICAgICAgICAgICBtZW5pbWFfcnQpICU+JQogICAgICAgIGdyb3VwX2J5KGlkKSAlPiUKICAgICAgICBhcnJhbmdlKGlkKSAlPiUKICAgICAgICBtdXRhdGUoaWQgPSBzdHJfcmVtb3ZlX2FsbChpZCwgIjxiciAvPjxiciAvPjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjE2cHg7XCI+IikpICU+JQogICAgICAgIG11dGF0ZShpZCA9IHN0cl9yZW1vdmVfYWxsKGlkLCAiPGJyPjxicj48c3BhbiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O1wiPiIpKSAlPiUKICAgICAgICBtdXRhdGUoaWQgPSBzdHJfcmVtb3ZlX2FsbChpZCwgIjwoLiopIikpICU+JQogICAgICAgIG11dGF0ZShleHBfdmVyID0gc3RyX3JlbW92ZV9hbGwoZXhwX3ZlciwgInN1YmplY3RpdmUganVkZ21lbnRzIGZvciBwaG90b2dyYXBoaWMgc3RpbXVsaSAtLS0gMCIpKSAlPiUKICAgICAgICBtdXRhdGUodXNpbmdtYWMgPSBzdHJfcmVtb3ZlX2FsbCh1c2luZ21hYywgIiAoLiopIikpICU+JQogICAgICAgIG11dGF0ZShyZXRpbmFzY3JlZW4gPSBzdHJfcmVtb3ZlX2FsbChyZXRpbmFzY3JlZW4sICIgKC4qKSIpKSAlPiUKICAgICAgICBtdXRhdGUocmV0aW5hc2NyZWVuID0gc3RyX3JlcGxhY2UocmV0aW5hc2NyZWVuLCAibm90IiwgIm5vdF9zdXJlIikpJT4lCiAgICAgICAgbXV0YXRlKGV0aG5pY2l0eSA9IHN0cl9yZW1vdmVfYWxsKGV0aG5pY2l0eSwgIjxzcGFuIHN0eWxlPVwiZm9udC1zaXplOjE2cHg7XCI+PHN0cm9uZz4iKSkgJT4lCiAgICAgICAgbXV0YXRlKGV0aG5pY2l0eSA9IHN0cl9yZW1vdmVfYWxsKGV0aG5pY2l0eSwgIjwoLiopIikpICU+JQogICAgICAgIG11dGF0ZShldGhuaWNpdHlvdGhlciA9IHN0cl9yZW1vdmVfYWxsKGV0aG5pY2l0eW90aGVyLCAiPHNwYW4gc3R5bGU9XCJmb250LXNpemU6MTZweDtcIj48c3Ryb25nPiIpKSAlPiUKICAgICAgICBtdXRhdGUoZXRobmljaXR5b3RoZXIgPSBzdHJfcmVtb3ZlX2FsbChldGhuaWNpdHlvdGhlciwgIjwoLiopIikpICU+JQogICAgICAgIG11dGF0ZShzdGltID0gc3RyX3JlbW92ZV9hbGwoc3RpbSwgImltYWdlcy9zdGltdWxpL3Bob3Rvcy8iKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiLnBuZyIpKSAlPiUKICAgICAgICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAiXm0kIiwgIm1hbGUiKSkgJT4lCiAgICAgICAgbXV0YXRlKGdlbmRlciA9IHN0cl9yZXBsYWNlKGdlbmRlciwgIl5jaXMgbWFsZSQiLCAibWFsZSIpKSAlPiUKICAgICAgICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAiXmYkIiwgImZlbWFsZSIpKSAlPiUKICAgICAgICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAiXmZlbWFsJCIsICJmZW1hbGUiKSkgJT4lCiAgICAgICAgbXV0YXRlKGdlbmRlciA9IHN0cl9yZXBsYWNlKGdlbmRlciwgIl5ub25iaW5hcnkkIiwgIm5vbi1iaW5hcnkiKSkgJT4lCiMjICBXaGVuIFAgZGlkIG5vdCBwcm92aWRlIGdlbmRlciwgdGhlIHNvZnR3YXJlIHBvcHVsYXRlZCB0aGlzIGNvbHVtbiB3aXRoIHRoZWlyIGFnZSBpbnN0ZWFkOgogICAgICAgIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeMjEkIiwgInVuc3BlY2lmaWVkIikpICU+JQogICAgICAgIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeMjgkIiwgInVuc3BlY2lmaWVkIikpICU+JQogICAgICAgIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeMjgkIiwgInVuc3BlY2lmaWVkIikpICU+JQogICAgICAgIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeMjkkIiwgInVuc3BlY2lmaWVkIikpICU+JQogICAgICAgIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeMzEkIiwgInVuc3BlY2lmaWVkIikpICU+JQogICAgICAgIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJeMzgkIiwgInVuc3BlY2lmaWVkIikpICU+JQojIyAgU29tZSBQIHdlcmUgbm90IGF1dG9tYXRpY2FsbHkgYXNzaWduZWQgYW4gaWQuIFBvcHVsYXRlIHdpdGggYW5vdGhlciBzdWJqZWN0LXVuaXF1ZSB2YWx1ZSAoZGF0ZSk6CiAgICAgICAgbXV0YXRlKGlkID0gc3RyX3JlcGxhY2UoaWQsICJcXHtcXHslcHJvbGlmaWNfcGlkJVxcfVxcfSIsIGRhdGUpKSAlPiUKIyMgIFR3byBpdGVtcyBoYWQgYSBudW1iZXIgYXQgdGhlIGVuZCBvZiB0aGVpciBuYW1lIGluIHNvbWUgY29uZGl0aW9ucywgcmVtb3ZlIHRoaXM6IAogICAgICAgIG11dGF0ZShzdGltID0gc3RyX3JlcGxhY2Uoc3RpbSwgInNrdW5rMy1waG90by1ncmV5MS5wbmciLCAic2t1bmszLXBob3RvLWdyZXkucG5nIikpICU+JQogICAgICAgIG11dGF0ZShzdGltID0gc3RyX3JlcGxhY2Uoc3RpbSwgInNrdW5rMy1waG90by1jb2xvdXIxLnBuZyIsICJza3VuazMtcGhvdG8tY29sb3VyIikpICU+JQojIyAgQW4gZXJyb3IgaW4gdGhlIGV4cGVyaW1lbnQgbWVhbnQgJ09yZGVyJyBjb2x1bW4gd2FzIG5vdCBjcmVhdGVkIGZvciBmaXJzdCAyMHAgKGFsbCBvZiB3aG9tIGRpZCAnQScpOiAKICAgICAgICBtdXRhdGUob3JkZXIgPSBpZmVsc2UoaWQgPT0gIjVjZDNhNTQ2ZmU4OTBhMDAwMTRkZWRkMSIgfCBpZCA9PSAiNWJhMmRlNWM5NjI0MTgwMDAxMTNlM2M4IiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID09ICI1ZDVlZjUzZWE1NWU2YTAwMTZkMmNhZTQiIHwgaWQgPT0gIjVkMjk0NWE0YmM1NzNiMDAxODVjOGVlZCIgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9PSAiNTZlNmE2NmFmNmVkOTAwMDA2YTU4NjdjIiB8IGlkID09ICI1ZDM5YzhiNDgwODcwMDAwMTlmM2U1NzMiIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPT0gIjViZGRkNzJiMThmMWI5MDAwMTc0MTA5ZSIgfCBpZCA9PSAiNWFjYTRlMjdhM2JhN2EwMDAxYjRkNDE1IiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID09ICI1ZDMzMDJlMDY3YThmZjAwMTVkYmZmODYiIHwgaWQgPT0gIjU2Y2U0MmQ5NDY1ZTU4MDAwNjg0NmY1NyIgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9PSAiNWJkMmRkZjMyNWI3MTkwMDAxNTUzMzA1IiB8IGlkID09ICI1YzgxODcyOTQyZmY0OTAwMTZjN2RjM2YiIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPT0gIjViOWY3ZTNkMDA4MTVkMDAwMTAzMjNmNiIgfCBpZCA9PSAiNTk1ZTc5NzRhZjc4ZGEwMDAxYTIxYzNhIiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID09ICI1YzkwYmI1OTBkMjFhMjAwMTdlYzQ1NWQiIHwgaWQgPT0gIjU5MzUzM2Q0ZWQyZTlhMDAwMWQzN2MwYiIgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9PSAiNWNkOWRkMDljOGUzNzUwMDAxOGFiNjI3IiB8IGlkID09ICI1OWQxMWYxNTE5ZDMxNzAwMDFiMWQ2NzkiIHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPT0gIjU5ZDY1YWQ4ZTI3NjI4MDAwMTVlYjUxYiIgfCBpZCA9PSAiNWMwM2I2NjgxYTIwMTEwMDAxZTk5NmE1IiAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQSIsIG9yZGVyKSkgJT4lCiMjICBSZW1vdmUgZW1wdHkgLyB1bmltcG9ydGFudCByb3dzOgogICAgICAgIG11dGF0ZShzdGltID0gbmFfaWYoc3RpbSwgIiIpKSAlPiUKICAgICAgICBkcm9wX25hKHN0aW0pICU+JQogICAgICAgIGRpc3RpbmN0KHN0aW0sIC5rZWVwX2FsbCA9IFRSVUUpICU+JQogICAgICAgIGFycmFuZ2UoaWQsIHN0aW0pICU+JQojIyAgQWRkIHJlc3BvbnNlIGNvdW50cyAoc28gd2UgY2FuIGV4Y2x1ZGUgcGVvcGxlIHRoYXQgZGlkbid0IGZpbmlzaCBhIHNlY3Rpb24pOgogICAgICAgIG11dGF0ZShuYW1pbmdfY291bnQgPSBzdW0oIWlzLm5hKG5hbWluZ19yZXNwb25zZSkpKSAlPiUKICAgICAgICBtdXRhdGUoZmFtaWxpYXJpdHlfY291bnQgPSBzdW0oIWlzLm5hKGZhbWlsaWFyaXR5KSkpICU+JQogICAgICAgIG11dGF0ZSh2aXNjb21fY291bnQgPSBzdW0oIWlzLm5hKHZpc3VhbGNvbXBsZXhpdHkpKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbGRpYV9jb3VudCA9IHN1bSghaXMubmEoY29sb3VyZGlhZ25vc3RpY2l0eSkpKSAlPiUKICAgICAgICBtdXRhdGUobWVuaW1hX2NvdW50ID0gc3VtKCFpcy5uYShtZW50YWxpbWFnZXJ5YWdyZWVtZW50KSkpCiAgICAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBQYXJ0aWNpcGFudCBzdW1tYXJ5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIGV4cDJfX3BhcnRpY2lwYW50cyA8LSBleHAyX19yYXdfZGF0YSAlPiUKICAgICAgICBzZWxlY3QoaWQsIGFnZSwgZ2VuZGVyLCBlbmdsaXNoZmlyc3RsYW5nLCBldGhuaWNpdHksIGV0aG5pY2l0eW90aGVyKSAlPiUKICAgICAgICBzdW1tYXJpc2VfYWxsKGNvYWxlc2NlX2J5X2NvbHVtbikKICAgIAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFJUcyBmb3IgYWxsIHZhcnMgZXhjZXB0IG5hbWluZzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZXhwMl9fYWxsX3J0cyA8LSBleHAyX19yYXdfZGF0YSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIGZhbV9ydCwgdmlzY29tX3J0LCBjb2xkaWFfcnQsIG1lbmltYV9ydCkgJT4lCiAgICAgICAgbXV0YXRlKGZhbV9ydCA9IHN0cl9yZW1vdmUoZmFtX3J0LCAiXFxbIikpICU+JQogICAgICAgIG11dGF0ZShmYW1fcnQgPSBzdHJfcmVtb3ZlKGZhbV9ydCwgIlxcXSIpKSAlPiUKICAgICAgICBtdXRhdGUodmlzY29tX3J0ID0gc3RyX3JlbW92ZSh2aXNjb21fcnQsICJcXFsiKSkgJT4lCiAgICAgICAgbXV0YXRlKHZpc2NvbV9ydCA9IHN0cl9yZW1vdmUodmlzY29tX3J0LCAiXFxdIikpICU+JQogICAgICAgIG11dGF0ZShjb2xkaWFfcnQgPSBzdHJfcmVtb3ZlKGNvbGRpYV9ydCwgIlxcWyIpKSAlPiUKICAgICAgICBtdXRhdGUoY29sZGlhX3J0ID0gc3RyX3JlbW92ZShjb2xkaWFfcnQsICJcXF0iKSkgJT4lCiAgICAgICAgbXV0YXRlKG1lbmltYV9ydCA9IHN0cl9yZW1vdmUobWVuaW1hX3J0LCAiXFxbIikpICU+JQogICAgICAgIG11dGF0ZShtZW5pbWFfcnQgPSBzdHJfcmVtb3ZlKG1lbmltYV9ydCwgIlxcXSIpKSAlPiUKICAgICAgICBtdXRhdGVfYXQodmFycyhmYW1fcnQsIHZpc2NvbV9ydCwgY29sZGlhX3J0LCBtZW5pbWFfcnQpLCBhcy5udW1lcmljKSAlPiUKICAgICAgICBncm91cF9ieShzdGltKSAlPiUKICAgICAgICBhcnJhbmdlKHN0aW0pCiAgICAKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBOQU1JTkc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAgIGV4cDJfX25hbWluZyA8LSBleHAyX19yYXdfZGF0YSAlPiUKICAgICAgICBmaWx0ZXIobmFtaW5nX2NvdW50ID09IDQ0IHwgbmFtaW5nX2NvdW50ID09IDQ4KSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIG5hbWluZ19yZXNwb25zZSwgbmFtaW5nX3J0KSAlPiUKICAgICAgICBkcm9wX25hKG5hbWluZ19yZXNwb25zZSkgJT4lCiAgICAgICAgZ3JvdXBfYnkoc3RpbSkgJT4lICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgIGFycmFuZ2UgKHN0aW0sIG5hbWluZ19yZXNwb25zZSkgJT4lCiAgICAgICAgbXV0YXRlKGNvcnJlY3RfbmFtZSA9IHN0cl9yZW1vdmVfYWxsKHN0aW0sICJbMS0zXSguKikiKSkgJT4lCiMjICBTcGVsbGluZyBjb3JyZWN0aW9uczoKIyMgICJObyIgcmVzcG9uc2VzOgogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeaWRrJCIsICJubyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXm5vbmUkIiwgIm5vIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYSQiLCAibm8iKSkgJT4lCiMjICBHZW5lcmFsIHNwZWxsaW5nIGVycm9yczoKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmFua2VyJCIsICJhbmNob3IiKSkgJT4lICAgICAgICAgCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5hbmNoZXIkIiwgImFuY2hvciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmFuY2hvcmUkIiwgImFuY2hvciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmFuY29yJCIsICJhbmNob3IiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5hc2h0cnkkIiwgImFzaHRyYXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl47YXNodHJheSQiLCAiYXNodHJheSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmFwYXJhZ3VzJCIsICJhc3BhcmFndXMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5iYWxsb24kIiwgImJhbGxvb24iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5iYWxvb24kIiwgImJhbGxvb24iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5iYWxsb25lJCIsICJiYWxsb29uIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFsbHVuJCIsICJiYWxsb29uIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFsbG9vbmUkIiwgImJhbGxvb24iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5iYW5uYW4kIiwgImJhbmFuYSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJhbW5uYSQiLCAiYmFuYW5hIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFuYW5uYSQiLCAiYmFuYW5hIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFubmFuYSQiLCAiYmFuYW5hIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFuYW5hYSQiLCAiYmFuYW5hIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFycmVsbCQiLCAiYmFycmVsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFycmxlJCIsICJiYXJyZWwiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5iYXJlbCQiLCAiYmFycmVsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmFycm93JCIsICJiYXJyZWwiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5idXNrZXQkIiwgImJhc2tldCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJlbGxwZXBwMzQkIiwgImJlbGxwZXBwZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5iZWF0bGUkIiwgImJlZXRsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJldHRsZSQiLCAiYmVldGxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmx1ZWJlcnJ5cyQiLCAiYmx1ZWJlcnJpZXMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5ieWN5Y2xlJCIsICJiaWN5Y2xlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYmljdWNsZSQiLCAiYmljeWNsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJpY3lsZSQiLCAiYmljeWNsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJvb3RsZSQiLCAiYm90dGxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeYm9sdyQiLCAiYm93bCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJyb29uJCIsICJicm9vbSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJyb29uJCIsICJicm9vbSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJydW0kIiwgImJyb29tIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2FtYWwkIiwgImNhbWVsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2FuZGRsZSQiLCAiY2FuZGxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2FubGUkIiwgImNhbmRsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmNhbm9uJCIsICJjYW5ub24iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jYXJyb3R0JCIsICJjYXJyb3QiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jYXJvdHQkIiwgImNhcnJvdCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmNlcmxlcnkkIiwgImNlbGVyeSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmNlbGFyeSQiLCAiY2VsZXJ5IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2VsbGFyeSQiLCAiY2VsZXJ5IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2VsZWFyeSQiLCAiY2VsZXJ5IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2hhaW4yJCIsICJjaGFpbiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmNvY2tyZWwkIiwgImNvY2tlcmVsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY29ja2Fyb2FjaCQiLCAiY29ja3JvYWNoIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY29jaHJvYWNoJCIsICJjb2Nrcm9hY2giKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jaGlzc2VsJCIsICJjaGlzZWwiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jaGl6ZWwkIiwgImNoaXNlbCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmNoZXN0b2ZkcmF3cyQiLCAiY2hlc3RvZmRyYXdlcnMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jaGVzdG9mZHJhd2Vyc2Vyc3MkIiwgImNoZXN0b2ZkcmF3ZXJzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeY2hpc2xlJCIsICJjaGlzZWwiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jbGFyYW5ldCQiLCAiY2xhcmluZXQiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5jb21iZSQiLCAiY29tYiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmRlYXIkIiwgImRlZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5kZWVyZSQiLCAiZGVlciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmRyYXdzJCIsICJkcmF3ZXJzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZG9vcm1vdXNlJCIsICJkb3Jtb3VzZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmVhZ2FsJCIsICJlYWdsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmVlYWdsZSQiLCAiZWFnbGUiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5lY2xpcHNlcyQiLCAiZWNsaXBzZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmVjbGlwZXMkIiwgImVjbGlwc2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5lY2xpcHNzZSQiLCAiZWNsaXBzZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmZhbGckIiwgImZsYWciKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5mb290c3RhbGwkIiwgImZvb3RzdG9vbCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmZvdHQkIiwgImZvb3QiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5mcm9nLyQiLCAiZnJvZyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmdpcmFmZmZlJCIsICJnaXJhZmZlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZ2lyYWZmZWUkIiwgImdpcmFmZmUiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5naXJyYWZlJCIsICJnaXJhZmZlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZ2lyYWZlJCIsICJnaXJhZmZlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZ2lyYWZmJCIsICJnaXJhZmZlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZ2lhZmZlZSQiLCAiZ2lyYWZmZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmdpcnJhZmZlJCIsICJnaXJhZmZlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZ2lhcmFmZmUkIiwgImdpcmFmZmUiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5nbGFzZXMkIiwgImdsYXNzZXMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5ndXRhaXIkIiwgImd1aXRhciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmdpdGF1ciQiLCAiZ3VpdGFyIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeZ2l0dGVyJCIsICJndWl0YXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5oZW1tYXIkIiwgImhhbW1lciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmhhbmQ1JCIsICJoYW5kIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeaGFtcCQiLCAiaGFycCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmthY2tldCQiLCAiamFja2V0IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJea2FuZ3JvbyQiLCAia2FuZ2Fyb28iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5sYWRlciQiLCAibGFkZGVyIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJebGF0dGVyJCIsICJsYWRkZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5sZWFmZSQiLCAibGVhZiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmxldHRhY2UkIiwgImxldHR1Y2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5sZWFtb24kIiwgImxlbW9uIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJebGVlbWEkIiwgImxlbXVyIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeb2xvYnN0ZXIkIiwgImxvYnN0ZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5tYWxlZGVhciQiLCAibWFsZWRlZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5tb3J0bGUkIiwgIm1vcnRhciIpKSAlPiUgICAgICAgIAogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJebW9ua2V5YnV0JCIsICJtb25rZXludXQiKSkgJT4lICAKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXm1vdXNzZSQiLCAibW9vc2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5uZWRkbGUkIiwgIm5lZWRsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXm5lY3RhcmluZWUkIiwgIm5lY3RhcmluZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXm9zdHJhZ2UkIiwgIm9zdHJpY2giKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5vc3RlcmljaCQiLCAib3N0cmljaCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXm9zdHJpZ2UkIiwgIm9zdHJpY2giKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5vc3RyaXNnZSQiLCAib3N0cmljaCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXm9zdHJpdGNoJCIsICJvc3RyaWNoIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJeb3N0cmlkZ2UkIiwgIm9zdHJpY2giKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5hcHJpY29ydGUkIiwgImFwcmljb3QiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5uZWN0YXJpbiQiLCAibmVjdGFyaW5lIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJebmVjdHJpbmUkIiwgIm5lY3RhcmluZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBlY29jayQiLCAicGVhY29jayIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBlYWNjayQiLCAicGVhY29jayIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBhaXIkIiwgInBlYXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5vZW5jaWwkIiwgInBlbmNpbCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBlbmdpdWluJCIsICJwZW5ndWluIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecGVuZ2l1biQiLCAicGVuZ3VpbiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBlbmd1aW5lJCIsICJwZW5ndWluIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecGVucXVpbiQiLCAicGVuZ3VpbiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBlZ3VpbiQiLCAicGVuZ3VpbiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBlcGVyJCIsICJwZXBwZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5wZXN0bGVhbmRtb3J0ZXIkIiwgInBlc3RsZWFuZG1vcnRhciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnRhYmFjY29waXBlJCIsICJ0b2JhY2NvcGlwZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBpY2NhbG8kIiwgInBpY2NvbG8iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5wbGlhcnMkIiwgInBsaWVycyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBsaWVyJCIsICJwbGllcnMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5wbHllcnMkIiwgInBsaWVycyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnBpbGVycyQiLCAicGxpZXJzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecGxpeWVycyQiLCAicGxpZXJzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedmljZXNjcmlwdHMkIiwgInZpY2VncmlwcyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnVzcGx1ZyQiLCAicGx1ZyIpKSAlPiUgICMjICBVbml0ZWQgU3RhdGVzIHBsdWc/IAogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecG90YXRvZSQiLCAicG90YXRvIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecG90dGF0byQiLCAicG90YXRvIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecHVta2luJCIsICJwdW1wa2luIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecHVtcGtpbSQiLCAicHVtcGtpbiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnB1bnBraW4kIiwgInB1bXBraW4iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5yYWJpdCQiLCAicmFiYml0IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecmFjb29uJCIsICJyYWNjb29uIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJebWVyY2F0JCIsICJtZWVya2F0IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJebWVlcmNhdCQiLCAibWVlcmthdCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmFjb29wJCIsICJzY29vcCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmVlbGUkIiwgInNlYWwiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5zZWVsJCIsICJzZWFsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJec25ha3ckIiwgInNuYWtlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJec3Nub3dtYW4kIiwgInNub3dtYW4iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5zaG93ZWwkIiwgInNob3ZlbCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnNvYWskIiwgInNvY2tzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJec3BvbiQiLCAic3Bvb24iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5zdGVwbGFkZXIkIiwgInN0ZXBsYWRkZXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5zdGVyc3MkIiwgInN0ZXAiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5zd2VldGNpcm4kIiwgInN3ZWV0Y29ybiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnJ1YmFyYiQiLCAicmh1YmFyYiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXnRoaW5iZWxsJCIsICJ0aGltYmxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedGhtYmxlJCIsICJ0aGltYmxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedGltYmxlJCIsICJ0aGltYmxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedGltYmlsJCIsICJ0aGltYmxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedGh1bmIkIiwgInRodW1iIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedG9pdG91c2UkIiwgInRvcnRvaXNlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedG9tYXRvZSQiLCAidG9tYXRvIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedG9tb2F0byQiLCAidG9tYXRvIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedG9ydGlzdGUkIiwgInRvcnRvaXNlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedG9ydGlzZSQiLCAidG9ydG9pc2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl50b3J0dXMkIiwgInRvcnRvaXNlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedm9saW9uJCIsICJ2aW9saW4iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl52aW9pbiQiLCAidmlvbGluIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJedmlvbGVuJCIsICJ2aW9saW4iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl52YWx0dXJlJCIsICJ2dWx0dXJlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJed2Fpc3Rjb2FzdCQiLCAid2Fpc3Rjb2F0IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJed2FzdGVjb2F0JCIsICJ3YWlzdGNvYXQiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl53YWxlJCIsICJ3ZWxsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJed2hpc3RlbCQiLCAid2hpc3RsZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXndoc2l0bGUkIiwgIndoaXN0bGUiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl53aGlzZWxsJCIsICJ3aGlzdGxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJed2hpdGxlJCIsICJ3aGlzdGxlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJed2luZG93biQiLCAid2luZG93IikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICJecGVuZXV0JCIsICJwZWFudXQiKSkgJT4lCiMjICBTZW5zaWJsZSB3b3JkIHJlc3BvbnNlcywgYnV0IGJhc2VkIG9uIHRoZSBwaWN0dXJlIFAgd2VyZSByZXNwb25kaW5nIHRvLCB3ZXJlIHByb2JhYmx5IHR5cG9zOiAKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAiXmJlZXIkIiwgImJlYXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgIl5kb2NrJCIsICJkdWNrIikpICU+JSAgICAgICAgIyMgSXRlbTogc3dhbi4KICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5mcm9jayQiLCAiZnJvZyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5nbGFzcyQiLCAiZ2xhc3NlcyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5nbGFzc2VzYm90dGxlJCIsICJib3R0bGUiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeaG9zZSQiLCAiaG91c2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJebm9pc2UkIiwgIm5vc2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJecGFwZXIkIiwgInBlcHBlciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5oYXJwZXIkIiwgImhhbXBlciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5tdXNjYXQkIiwgIm11c2tyYXQiKSkgJT4lICAjIyBJdGVtOiByYWNjb29uLgojIyAgJ2JpdHRsZScgYXBwZWFyZWQgZm9yIGJvdGggYmVldGxlIGFuZCBib3R0bGUuIENoZWNrIHdoaWNoIGl0ZW0gUCB3ZXJlIHJlc3BvbmRpbmcgdG8gYmVmb3JlIGNvcnJlY3Rpbmc6CiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IGlmZWxzZShuYW1pbmdfcmVzcG9uc2UgPT0gImJpdHRsZSIgJiBjb3JyZWN0X25hbWUgPT0gImJvdHRsZSIsICJib3R0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UobmFtaW5nX3Jlc3BvbnNlID09ICJiaXR0bGUiICYgY29ycmVjdF9uYW1lID09ICJiZWV0bGUiLCAiYmVldGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWluZ19yZXNwb25zZSkpKSAlPiUgICAKIyMgIFBsdXJhbCB0byBzaW5ndWxhcjogCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeY2Fycm90cyQiLCAiY2Fycm90IikpICU+JSAgIAogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmNsb3VkcyQiLCAiY2xvdWQiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeZHJhdyQiLCAiZHJhd2VycyIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5kcmF3ZXIkIiwgImRyYXdlcnMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeZHJ1bXMkIiwgImRydW0iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeZmVldCQiLCAiZm9vdCIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5nZWVzZSQiLCAiZ29vc2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeZ2xvdmVzJCIsICJnbG92ZSIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5ncmFwZSQiLCAiZ3JhcGVzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmxhZGRlcnMkIiwgImxhZGRlciIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5saXAkIiwgImxpcHMiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJebWljZSQiLCAibW91c2UiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJebWl0dGVucyQiLCAibWl0dGVuIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXm9uaW9ucyQiLCAib25pb24iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJeb25pb25zJCIsICJvbmlvbiIpKSAlPiUKICAgICAgICBtdXRhdGUobmFtaW5nX3Jlc3BvbnNlID0gc3RyX3JlcGxhY2UobmFtaW5nX3Jlc3BvbnNlLCAgIl5wZWFudXRzJCIsICJwZWFudXQiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJecGVhcnMkIiwgInBlYXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJecGVwcGVycyQiLCAicGVwcGVyIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnB1bXBraW5zJCIsICJwdW1wa2luIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnNob2VzJCIsICJzaG9lIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnNvY2skIiwgInNvY2tzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnN0ZXBzJCIsICJzdGVwIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmJhYnlkb2xsJCIsICJkb2xsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmJyb29tc3RpY2skIiwgImJyb29tIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmNvY2skIiwgImNvY2tlcmVsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmN5Y2xlJCIsICJiaWN5Y2xlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmRvbGx5JCIsICJkb2xsIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmV5ZWdsYXNzJCIsICJleWVnbGFzc2VzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmZlbmNpbmckIiwgImZlbmNlIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmhhaXJjb21iJCIsICJjb21iIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXmxvbmdkcmVzcyQiLCAiZHJlc3MiKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJebWl0JCIsICJtaXR0ZW4iKSkgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19yZXNwb25zZSA9IHN0cl9yZXBsYWNlKG5hbWluZ19yZXNwb25zZSwgICJecGx1Z2luJCIsICJwbHVnIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnJ1bGUkIiwgInJ1bGVyIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnNwZWNzJCIsICJzcGVjdGFjbGVzIikpICU+JQogICAgICAgIG11dGF0ZShuYW1pbmdfcmVzcG9uc2UgPSBzdHJfcmVwbGFjZShuYW1pbmdfcmVzcG9uc2UsICAiXnRlYWtldHRsZSQiLCAia2V0dGxlIikpICU+JQogICAgICAgICAgCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgTmFtaW5nIHRvdGFsczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgYWRkX2NvdW50KHN0aW0sIG5hbWUgPSAidG90YWxfcmVzcG9uc2VzIikgJT4lCiAgICAgICAgYWRkX2NvdW50KG5hbWluZ19yZXNwb25zZSwgbmFtZSA9ICJyZXNwX2NvdW50IikgJT4lCiAgICAgICAgbXV0YXRlKG5hbWluZ19ydCA9IGFzLmRvdWJsZShuYW1pbmdfcnQpKSAlPiUKICAgICAgICBtdXRhdGUobWVhbl9ydCA9IG1lYW4obmFtaW5nX3J0KSkgJT4lCiAgICAgICAgbXV0YXRlKHByb3BfcmVzcCA9IChyZXNwX2NvdW50IC8gdG90YWxfcmVzcG9uc2VzKSkgJT4lCiAgICAgICAgbXV0YXRlKG5vX2NvdW50ID0gc3VtKG5hbWluZ19yZXNwb25zZSA9PSAibm8iKSkgJT4lICAgIAogICAgICAgIG11dGF0ZShwcm9wX25vID0gKG5vX2NvdW50IC8gdG90YWxfcmVzcG9uc2VzKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvcnJlY3RfY291bnQgPSBzdW0obmFtaW5nX3Jlc3BvbnNlID09IGNvcnJlY3RfbmFtZSkpICU+JQogICAgICAgIG11dGF0ZShwcm9wX2NvcnJlY3QgPSAoY29ycmVjdF9jb3VudCAvIHRvdGFsX3Jlc3BvbnNlcykpICU+JQogICAgICAgIG11dGF0ZShpbmNvcnJlY3RfY291bnQgPSBzdW0obmFtaW5nX3Jlc3BvbnNlICE9IGNvcnJlY3RfbmFtZSkpICU+JQogICAgICAgIG11dGF0ZShwcm9wX2luY29ycmVjdCA9IChpbmNvcnJlY3RfY291bnQgLyB0b3RhbF9yZXNwb25zZXMpKSAlPiUKICAgICAgICBzZWxlY3QoLXRvdGFsX3Jlc3BvbnNlcykgJT4lCiAgICAgICAgZGlzdGluY3QobmFtaW5nX3Jlc3BvbnNlLCAua2VlcF9hbGwgPSBUUlVFKQogICAgZXhwMl9fbmFtaW5nX3J0IDwtIGV4cDJfX25hbWluZyAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgbWVhbl9ydCkgJT4lCiAgICAgICAgZGlzdGluY3Qoc3RpbSwgLmtlZXBfYWxsID0gVFJVRSkKIyMgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KIyMgIFNlbGVjdGluZyBpdGVtcyB0byB0YWtlIGZvcndhcmQ6CiMjICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCiMjICBDcml0ZXJpYSAxOiBpdGVtcyB3aXRoIGEg4oCcZG9u4oCZdCBrbm934oCdIHNjb3JlIG92ZXIgMjAlOgogICAgZXhwMl9fZXhjbHVzaW9uXzEgPC0gZXhwMl9fbmFtaW5nICU+JSAKICAgICAgICBmaWx0ZXIocHJvcF9ubyA+PSAwLjIpICU+JSAgICAKICAgICAgICBkaXN0aW5jdChzdGltLCAua2VlcF9hbGwgPSBUUlVFKQojIyAgQ3JpdGVyaWEgMjogaXRlbXMgaW5jb3JyZWN0bHkgbmFtZWQgYnkgdGhlIG1ham9yaXR5IG9mIHN1YmplY3RzIChwcm9wX2NvcnJlY3QgZXF1YWxzIC41MCBvciBsb3dlcikuCiAgICBleHAyX19leGNsdXNpb25fMiA8LSBleHAyX19uYW1pbmcgJT4lCiAgICAgICAgZmlsdGVyKHByb3BfY29ycmVjdCA8PSAwLjUpICU+JQogICAgICAgIGRpc3RpbmN0KHN0aW0sIC5rZWVwX2FsbCA9IFRSVUUpCiMjICBDcml0ZXJpYSAzOiBpdGVtcyB3aGVyZSBvbmx5IDIwJSAob3IgZmV3ZXIpIHN1YmplY3RzIG5hbWVkIHRoZSBvYmplY3Qgc2ltaWxhcmx5IChwb29yIG5hbWluZyBhZ3JlZW1lbnQpLiAKICAgIGV4cDJfX2V4Y2x1c2lvbl8zIDwtIGV4cDJfX25hbWluZyAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgZmlsdGVyKHByb3BfcmVzcCA9PSBtYXgocHJvcF9yZXNwKSkgJT4lICAgICAjIyAgR2V0IHRoZSBoaWdoZXN0IGFncmVlZCB1cG9uIG5hbWUgZm9yIGVhY2ggb2JqZWN0LgogICAgICAgIGZpbHRlcihwcm9wX3Jlc3AgPD0gMC4yKSAgICAgICAgICAgICAgICAgICAgIyMgIEZpbHRlciB0byBzZWUgaWYgYW55IGl0ZW1zIHJlY2VpdmVkIDwyMCUgYWdyZWVtZW50LgojIyAgQ29tYmluZSBhbGwgdG8tYmUtZXhjbHVkZWQgaXRlbXMgaW50byBhIHNpbmdsZSBkZjoKICAgIGV4cDJfX2FsbF9leGNsdXNpb24gPC0gYmluZF9yb3dzKGV4cDJfX2V4Y2x1c2lvbl8xLCBleHAyX19leGNsdXNpb25fMiwgZXhwMl9fZXhjbHVzaW9uXzMpICU+JQogICAgICAgIGFycmFuZ2Uoc3RpbSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojIyAgU2ltcGxpZmllZCBsaXN0IG9mIHRvLWJlLWV4Y2x1ZGVkIGl0ZW0gbmFtZXMgKGNvbG91ci9ncmV5c2NhbGUgdGFrZW4gb3V0KTogICAgICAgCiAgICBleHAyX19pdGVtc190b19leGNsdWRlIDwtIGMoZXhwMl9fYWxsX2V4Y2x1c2lvbiRzdGltKSAlPiUKIyMgIEl0J3Mgbm90IHJlYWxseSBpbXBvcnRhbnQgd2hldGhlciB0aGUgZ3JleSBvciBjb2xvdXIgdmVyc2lvbiBvZiBhbiBpdGVtIGRpZCBub3QgbWVldCB0aGUgaW5jbHVzaW9uIGNyaXRlcmlhLgojIyAgUmVnYXJkbGVzcyBvZiB3aGljaCBpcyBmbGFnZ2VkLCB3ZSByZW1vdmUgYm90aCBncmV5IGFuZCBjb2xvdXIgKHdlIG5lZWQgYm90aCB2ZXJzaW9ucyBnb2luZyBmb3J3YXJkKS4KICAgICAgICBzdHJfcmVtb3ZlX2FsbCgiWy1dKC4qKSIpICU+JQogICAgICAgIHVuaXF1ZSgpCiMjICBEcm9wIHRoZXNlIGl0ZW1zIGZyb20gbmFtaW5nIGRhdGE6CiAgICBleHAyX19uYW1pbmcgPC0gZXhwMl9fbmFtaW5nICU+JQogICAgICAgIG11dGF0ZSh0ZW1wX3N0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICBmaWx0ZXIoIXRlbXBfc3RpbSAlaW4lIGV4cDJfX2l0ZW1zX3RvX2V4Y2x1ZGUpICU+JQogICAgICAgIHNlbGVjdCgtdGVtcF9zdGltKQojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQojIyAgSWRlbnRpZnkgaXRlbXMgd2l0aCBsZWFzdCBkaWZmZXJlbmNlIGJldHdlZW4gY29sb3VyIGFuZCBncmV5OgojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQogICAgZXhwMl9fZ3JleSA8LSBleHAyX19uYW1pbmcgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIHByb3BfY29ycmVjdCkgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkkIikpICU+JQogICAgICAgIGRpc3RpbmN0KHN0aW0sIC5rZWVwX2FsbCA9IFRSVUUpICU+JQogICAgICAgIHJlbmFtZShncmV5X2NvcnJlY3QgPSBwcm9wX2NvcnJlY3QpICU+JQogICAgICAgIG11dGF0ZShzdGltID0gc3RyX3JlbW92ZV9hbGwoc3RpbSwgIlstXSguKikiKSkKICAgIGV4cDJfX2NvbCA8LSBleHAyX19uYW1pbmcgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIHByb3BfY29ycmVjdCkgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImNvbG91ciQiKSkgJT4lCiAgICAgICAgZGlzdGluY3Qoc3RpbSwgLmtlZXBfYWxsID0gVFJVRSkgJT4lCiAgICAgICAgcmVuYW1lKGNvbF9jb3JyZWN0ID0gcHJvcF9jb3JyZWN0KSAlPiUKICAgICAgICBtdXRhdGUoc3RpbSA9IHN0cl9yZW1vdmVfYWxsKHN0aW0sICJbLV0oLiopIikpCiAgICBleHAyX19jb2xfYW5kX2dyZXkgPC0gcmlnaHRfam9pbihleHAyX19ncmV5LCBleHAyX19jb2wsIGJ5ID0gJ3N0aW0nKSAlPiUKICAgICAgICBtdXRhdGUoZGlmZmVyZW5jZSA9IGFicyhjb2xfY29ycmVjdCAtIGdyZXlfY29ycmVjdCkpCiMjICBGb3IgZWFjaCBvZiB0aGUgb2JqZWN0IG5hbWVzLCBnaXZlIHVzIHRoZSB2ZXJzaW9uIHdpdGggdGhlIGxlYXN0ICdkaWZmZXJlbmNlJyAob2YgJSBjb3JyZWN0KSBiZXR3ZWVuIGNvbG91ciAjIyAgYW5kIGdyZXlzY2FsZS4KIyMgIExpc3QgYWxsIG9iamVjdCBuYW1lcyB0byBsb29wIHRocm91Z2g6CiAgICBleHAyX19pdGVtX25hbWVzIDwtIGV4cDJfX2NvbF9hbmRfZ3JleSAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWzAtM10iKSkgJT4lCiAgICAgICAgZGlzdGluY3Qoc3RpbSkgJT4lCiAgICAgICAgcHVsbCgpCiAgICBleHAyX19zZWxlY3RlZF9zdGltdWxpIDwtIHRpYmJsZSgpICAgICAgICAgICAgICAgICMjICBDcmVhdGUgZW1wdHkgZGYgdG8gc3RvcmUgcmVzdWx0cyBvZiBmb3IgbG9vcC4gCiAKIyMgIERlZmluZSBmdW5jdGlvbiB0aGF0IHNlbGVjdHMgYXBwcm9wcmlhdGUgcm93KHMpLCBkZXBlbmRpbmcgb24gd2hldGhlciBpdGVtcyBzaGFyZSB0aGUgc2FtZSBkaWZmZXJlbmNlIHZhbHVlLgogICAgbXlfZnVuY3Rpb24gPC0gZnVuY3Rpb24oaSl7CiAgICAgICAgaWYgKGlbMSw1XSA9PSAxKSB7ICAgICAgICAjIyAgSWYgdG9wIHJvdyBvZiAidGFsbHlfZGlmZmVyZW5jZV92YWx1ZXMiID09IDEsCiAgICAgICAgICAgIGkgJT4lIC5bMSxdIH0gICAgICAgICAjIyAgdGhhdCdzIHRoZSBsb3dlc3QgZGlmZmVyZW5jZSwgc28gb25seSBrZWVwIG9ubHkgdGhhdCByb3cuCiAgICAgICAgZWxzZSBpZiAoaVsxLDVdID09IDIpIHsgICAjIyAgSWYgdG9wIHJvdyBvZiAidGFsbHlfZGlmZmVyZW5jZV92YWx1ZXMiID09IDIsCiAgICAgICAgICAgIGkgJT4lIC5bMToyLF0gfSAgICAgICAjIyAgdGhlbiB0aGUgbG93ZXN0IGRpZmZlcmVuY2UgaXMgc2hhcmVkIGJ5IHR3byByb3dzLCBzbyBrZWVwIGJvdGguCiAgICAgICAgZWxzZSBpZiAoaVsxLDVdID09IDMpIHsgICAjIyAgSWYgdG9wIHJvdyBvZiAidGFsbHlfZGlmZmVyZW5jZV92YWx1ZXMiID09IDMsCiAgICAgICAgICAgIGkgJT4lIC5bMTozLF0gfX0gICAgICAjIyAgdGhlbiB0aGUgbG93ZXN0IGRpZmZlcmVuY2UgaXMgc2hhcmVkIGJ5IGFsbCAzIHJvd3MsIHNvIGtlZXAgYWxsLgojIyAgUnVuIGxvb3A6IAogICAgZm9yIChpIGluIGV4cDJfX2l0ZW1fbmFtZXMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBGb3IgZWFjaCBpdGVtIChpKSBpbiBleHAyX19pdGVtX25hbWVzOwogICAgICAgIGkgPC0gZXhwMl9fY29sX2FuZF9ncmV5ICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBpIGVxdWFscyB0aGUgZGF0YSBmcm9tIGV4cDJfX2NvbF9hbmRfZ3JleTsKICAgICAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgaSkpICU+JSAgICAgICAgICAgICAgICAgICAjIyAgZmlsdGVyIGJ5IGVhY2ggaXRlbSBzZXBhcmF0ZWx5OwogICAgICAgICAgICBncm91cF9ieShkaWZmZXJlbmNlKSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBncm91cCBieSAnZGlmZmVyZW5jZScgY29sOwogICAgICAgICAgICBhZGRfY291bnQoZGlmZmVyZW5jZSwgCiAgICAgICAgICAgICAgICAgICAgICBuYW1lID0gInRhbGx5X2RpZmZlcmVuY2VfdmFsdWVzIikgJT4lICAgIyMgIGFkZCBjb2x1bW4gY291bnRpbmcgdW5pcXVlIGRpZmZlcmVuY2UgdmFsdWVzOwogICAgICAgICAgICBhcnJhbmdlKGRpZmZlcmVuY2UpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBzb3J0IGRpZmZlcmVuY2UgdmFsdWVzIChhc2NlbmRpbmcpOwogICAgICAgICAgICBteV9mdW5jdGlvbigpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBSdW4gYWJvdmUgZnVuY3Rpb24uCiAgICAgICAgZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSA8LSBiaW5kX3Jvd3MoZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSwgaSkgfSAgIyMgIEFkZCByb3cgdG8gZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSBkZiBiZWZvcmUgbG9vcGluZy4KICAgIGV4cDJfX3NlbGVjdGVkX3N0aW11bGkgPC0gZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSAlPiUKICAgICAgICBkaXN0aW5jdChzdGltLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUKICAgICAgICBhcnJhbmdlKHN0aW0pCiMjICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCiMjICBJbnRlci1yYXRlciBzZWxlY3Rpb25zOgojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQojIyAgRm9yIG9iamVjdHMgd2hlcmUgPjEgdmFyaWF0aW9uIHJlbWFpbnMgKG5vIGRpZmZlcmVuY2UgYmV0d2VlbiBjb2wvZ3JleXNjYWxlIHZhcmlhdGlvbnMpLCB3ZSBtdXN0IG1hbnVhbGx5CiMjICBzZWxlY3QgdGhlIHZhcmlhdGlvbiB3ZSB0aGluayBpcyB0aGUgYmVzdCB0byBiZSB0YWtlbiBmb3J3YXJkIHRvIHRoZSBmaW5hbCBzdGltdWxpIHNldC4gCiAgICBleHAyX19pbnRlcl9yYXRlciA8LSBleHAyX19zZWxlY3RlZF9zdGltdWxpICU+JQogICAgICAgIHNlbGVjdChzdGltLCB0YWxseV9kaWZmZXJlbmNlX3ZhbHVlcykgJT4lCiAgICAgICAgZmlsdGVyKHRhbGx5X2RpZmZlcmVuY2VfdmFsdWVzID4xKQojIyAgVGhlICJleHAyX19pbnRlcl9yYXRlciIgZGYgd2FzIGV4cG9ydGVkIGhlcmUgc28gZWFjaCByYXRlciBjb3VsZCBnaXZlIHRoZWlyIGluZGVwZW5kZW50IHJhbmtpbmdzIGZvciBlYWNoIG9iamVjdC4KIyMgIEltcG9ydCByYXRpbmcgZGF0YTogCiAgICBleHAyX19yYXRlcl8xIDwtIHJlYWRfY3N2KCIuL3Jlc291cmNlcy9leHBlcmltZW50XzIvcmF0ZXJfMS5jc3YiLCBjb2xfdHlwZXMgPSBsaXN0KGNvbF9jaGFyYWN0ZXIoKSwgY29sX2RvdWJsZSgpKSkgJT4lCiAgICAgICAgcmVuYW1lKGV4cDJfX3JhdGVyXzEgPSByYXRpbmcpCiAgICBleHAyX19yYXRlcl8yIDwtIHJlYWRfY3N2KCIuL3Jlc291cmNlcy9leHBlcmltZW50XzIvcmF0ZXJfMi5jc3YiLCBjb2xfdHlwZXMgPSBsaXN0KGNvbF9jaGFyYWN0ZXIoKSwgY29sX2RvdWJsZSgpKSkgJT4lCiAgICAgICAgcmVuYW1lKGV4cDJfX3JhdGVyXzIgPSByYXRpbmcpCiAgICBleHAyX19hZ3JlZW1lbnRzIDwtIG1lcmdlKGV4cDJfX3JhdGVyXzEsIGV4cDJfX3JhdGVyXzIpICU+JQogICAgICAgIGdyb3VwX2J5KHN0aW0pICU+JQogICAgICAgIGZpbHRlcihleHAyX19yYXRlcl8xID09IDEgJiBleHAyX19yYXRlcl8yID09IDEpICU+JQogICAgICAgIG11dGF0ZShzdGltX3JhdyA9IHN0cl9yZW1vdmUoc3RpbSwgIlsxLTNdIikpCiMjICBGb3IgYWxsIHRoZSBpdGVtcyB3aGVyZSB0aGVyZSB3YXMgZGlzYWdyZWVtZW50LCB3ZSBuZWVkIHRvIGp1c3Qgc2VsZWN0IG9uZSBvZiB0aGUgb3B0aW9ucyBhdCByYW5kb206CiAgICAgICAgZXhwMl9fYWdyZWVfaXRlbXMgPC0gZXhwMl9fYWdyZWVtZW50cyAlPiUKICAgICAgICBwdWxsKHN0aW1fcmF3KQogICAgZXhwMl9fZGlzYWdyZWVtZW50cyA8LSBtZXJnZShleHAyX19yYXRlcl8xLCBleHAyX19yYXRlcl8yKSAlPiUKICAgICAgICByZW5hbWUoZGlzYWdyZWVkID0gInN0aW0iKSAlPiUKICAgICAgICBtdXRhdGUoc3RpbV9yYXcgPSBzdHJfcmVtb3ZlKGRpc2FncmVlZCwgIlsxLTNdIikpICU+JQogICAgICAgIGZpbHRlcighc3RpbV9yYXcgJWluJSBleHAyX19hZ3JlZV9pdGVtcykgJT4lCiAgICAgICAgZmlsdGVyKGV4cDJfX3JhdGVyXzEgIT0gZXhwMl9fcmF0ZXJfMikgJT4lCiAgICAgICAgZ3JvdXBfYnkoc3RpbV9yYXcpCiMjICBUaGUgZm9sbG93aW5nIGNvZGUgYXMgdXNlZCB0byByYW5kb21pc2UgKGJ1dCBydW5uaW5nIHRoaXMgYWdhaW4gd291bGQgZ2l2ZSBkaWZmZXJlbnQgcmVzdWx0cyEpOgogICAgICAgICNleHAyX19yYW5kb21pc2VkX2Rpc2FncmVlX2l0ZW1zIDwtIHNhbXBsZV9uKGRpc2FncmVlbWVudHMsIDEpICU+JQogICAgICAgICAgICAjdW5ncm91cCgpICU+JQogICAgICAgICAgICAjc2VsZWN0KGRpc2FncmVlZCkgJT4lCiAgICAgICAgICAgICNyZW5hbWUoc3RpbSA9ICJkaXNhZ3JlZWQiKQogICAgICAgICN3cml0ZS5jc3YoZXhwMl9fcmFuZG9taXNlZF9kaXNhZ3JlZV9pdGVtcywnfi9EZXNrdG9wL2V4cDJfX3JhbmRvbWlzZWRfZGlzYWdyZWVfaXRlbXMuY3N2Jywgcm93Lm5hbWVzID0gRkFMU0UpCiMjICBTaW5jZSB3ZSB3cm90ZSBvdXIgb3JpZ2luYWwgcmFuZG9taXNlZCBzZWxlY3Rpb24gdG8gLmNzdiwgd2UgaW1wb3J0IHRoYXQgdG8gZ2V0IHRoZSBzYW1lIHJlc3VsdHMuCiAgICBleHAyX19yYW5kb21pc2VkX2Rpc2FncmVlX2l0ZW1zIDwtIHJlYWRfY3N2KCIuL3Jlc291cmNlcy9leHBlcmltZW50XzIvcmFuZG9taXNlZF9kaXNhZ3JlZV9pdGVtcy5jc3YiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGVzID0gbGlzdChjb2xfY2hhcmFjdGVyKCkpKQogICAgZXhwMl9faW50ZXJfcmF0ZXJfaXRlbXMgPC0gZXhwMl9fYWdyZWVtZW50cyAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSkgJT4lCiAgICAgICAgYmluZF9yb3dzKGV4cDJfX3JhbmRvbWlzZWRfZGlzYWdyZWVfaXRlbXMpICU+JQogICAgICAgIGFycmFuZ2Uoc3RpbSkgCgojIyAgV2Ugd2FudCB0byBhZGQgdGhlc2UgaXRlbXMgYmFjayBpbnRvIHRoZSAiZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSIgZGYsIHNvIHdlIGhhdmUgYSBjb21wbGV0ZSBsaXN0IG9mIGZpbmFsIHN0aW0uCiMjICBGaXJzdCByZW1vdmUgYWxsIHZhcmlhdGlvbnMgb2YgdGhlc2UgaXRlbXMgZnJvbSAiZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSIgYmVmb3JlIGFkZGluZyAiZXhwMl9faW50ZXJfcmF0ZXJfaXRlbXMiIGJhY2sgaW4uCiAgICBleHAyX19pbnRlcl9yYXRlcl9pdGVtc19yYXcgPC0gZXhwMl9faW50ZXJfcmF0ZXJfaXRlbXMgJT4lCiAgICAgICAgcHVsbChzdGltKSAlPiUKICAgICAgICBzdHJfcmVtb3ZlKCJbMS0zXSIpCiAgICBleHAyX19maW5hbF9zdGltX2xpc3QgPC0gZXhwMl9fc2VsZWN0ZWRfc3RpbXVsaSAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW1fcmF3ID0gc3RyX3JlbW92ZShzdGltLCAiWzEtM10iKSkgJT4lCiAgICAgICAgZmlsdGVyKCFzdGltX3JhdyAlaW4lIGV4cDJfX2ludGVyX3JhdGVyX2l0ZW1zX3JhdykgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltX3JhdykgJT4lCiAgICAgICAgYmluZF9yb3dzKGV4cDJfX2ludGVyX3JhdGVyX2l0ZW1zKSAlPiUKICAgICAgICBhcnJhbmdlKHN0aW0pCiMjICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCiMjICBIIHN0YXQgKG5hbWluZyBhZ3JlZW1lbnQpOgojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQogICAgZXhwMl9fSF9zdGF0X2FsbF9pdGVtcyA8LSBleHAyX19uYW1pbmcgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIG5hbWluZ19yZXNwb25zZSwgcHJvcF9yZXNwLCBwcm9wX2NvcnJlY3QpICU+JSAKICAgICAgICBmaWx0ZXIoIW5hbWluZ19yZXNwb25zZSA9PSAibm8iKSAlPiUgICAgIyMgICJEb24ndCBrbm93IiByZXNwb25zZXMgY2Fubm90IGJlIGluY2x1ZGVkIGluIEggY2FsY3VsYXRpb25zLgogICAgICAgIHJlbmFtZShwaSA9ICJwcm9wX3Jlc3AiKSAlPiUgICAgICAgICAgICAjIyAgcGkgPSBwcm9wb3J0aW9uIG9mIHN1YmplY3RzIHByb2R1Y2luZyB0aGUgaS10aCBuYW1lLgogICAgICAgIG11dGF0ZShvbmVfZGl2aWRlZF9ieV9waSA9IDEgLyBwaSkgJT4lCiAgICAgICAgbXV0YXRlKGxvZ190d28gPSBsb2cyKG9uZV9kaXZpZGVkX2J5X3BpKSkgJT4lICAgICAjIyAgTG9nIG9mIGJhc2UgMiBvZiAxIC8gcHJvcC4KICAgICAgICBtdXRhdGUobXVsdGlwbGllZCA9IHBpKmxvZ190d28pICU+JSAgICAgICAgICAgICAgICMjICBwaSBtdWx0aXBsaWVkIGJ5ICdsb2cgb2YgYmFzZSAyJyBvZiAxIC8gcHJvcC4KICAgICAgICBtdXRhdGUoSCA9IHN1bShtdWx0aXBsaWVkKSkgJT4lICAgICAgICAgICAgICAgICAgICMjICBTdW0gbXVsdGlwbGllZCB2YWx1ZXMgZm9yIGVhY2ggaXRlbSA9IEguIAogICAgICAgIGFycmFuZ2Uoc3RpbSwgZGVzYyhwaSkpICU+JQogICAgICAgIHNlbGVjdChzdGltLCBuYW1pbmdfcmVzcG9uc2UsIHByb3BfY29ycmVjdCwgSCklPiUKICAgICAgICBkaXN0aW5jdChzdGltLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUKICAgICAgICByZW5hbWUobW9zdF9mcmVxX25hbWUgPSBuYW1pbmdfcmVzcG9uc2UpICU+JQogICAgICAgIG11dGF0ZV9hdChjKCJwcm9wX2NvcnJlY3QiLCAiSCIpLCByb3VuZCwgMikgJT4lCiMjICBUd28gaXRlbXMgc3RpbGwgaGFkIGEgbnVtYmVyIGF0IHRoZSBlbmQgb2YgdGhlaXIgbmFtZSBpbiBzb21lIGNvbmRpdGlvbnMsIHJlbW92ZSB0aGlzOiAKICAgICAgICBtdXRhdGUoc3RpbSA9IHN0cl9yZXBsYWNlKHN0aW0sICJza3VuazMtcGhvdG8tZ3JleTEiLCAic2t1bmszLXBob3RvLWdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAic2t1bmszLXBob3RvLWNvbG91cjEiLCAic2t1bmszLXBob3RvLWNvbG91ciIpKQojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQojIyAgS3JpcHBlbmRvcmZmJ3MgYWxwaGEgKHJlbGlhYmlsaXR5IGNvZWZmaWNpZW50KSBzdGF0OgojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQogICAgZXhwMl9fa3JpcHBfZXhwMl9fcmF0ZXJfMSA8LSBleHAyX19yYXRlcl8xICU+JQogICAgICAgIHNwcmVhZChzdGltLCBleHAyX19yYXRlcl8xKQogICAgZXhwMl9fa3JpcHBfZXhwMl9fcmF0ZXJfMiA8LSBleHAyX19yYXRlcl8yICU+JQogICAgICAgIHNwcmVhZChzdGltLCBleHAyX19yYXRlcl8yKQogICAgZXhwMl9fa3JpcHBfcmF0aW5ncyA8LSBiaW5kX3Jvd3MoZXhwMl9fa3JpcHBfZXhwMl9fcmF0ZXJfMSwgZXhwMl9fa3JpcHBfZXhwMl9fcmF0ZXJfMikKIyMgIExvb3AgdGhhdCBydW5zIHRocm91Z2ggZWFjaCBvZiB0aGUgcmF0ZWQgb2JqZWN0cyBhbmQgaW5kaXZpZHVhbGx5IGNhbGN1bGF0ZXMga3JpcHBzIGFscGhhOiAKICAgIGV4cDJfX2tyaXBwc19hbHBoYSA8LSB0aWJibGUoKSAgICAgICAgICAgICAgICAgICMjICBDcmVhdGUgZW1wdHkgZGYgdG8gc3RvcmUgcmVzdWx0cyBvZiBmb3IgbG9vcC4gCiAgICBmb3IgKGkgaW4gZXhwMl9faW50ZXJfcmF0ZXJfaXRlbXNfcmF3KSB7CiAgICAgICAgZXhwMl9fa3JpcHBfY2FsYyA8LSBleHAyX19rcmlwcF9yYXRpbmdzICU+JQogICAgICAgICAgICBzZWxlY3QoY29udGFpbnMoaSkpICU+JSAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBTZWxlY3QgYWxsIHJhdGluZ3MgZm9yIGVhY2ggaXRlbSBpbiB0dXJuIChpKS4KICAgICAgICAgICAgYXMubWF0cml4KCkgJT4lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgVGliYmxlIHRvIG1hdHJpeCwgc28gImtyaXBwLmFscGhhIiBjYW4gcnVuLgogICAgICAgICAgICBrcmlwcC5hbHBoYSgib3JkaW5hbCIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjICBSdW4gS3JpcHBlbmRvcmZmJ3MgQWxwaGEgY2FsY3VsYXRpb24uCiAgICAgICAgZXhwMl9fa3JpcHBfY2FsYyA8LSBhcy50aWJibGUoZXhwMl9fa3JpcHBfY2FsY1tjKDIsMyw1KV0pICU+JSAgICAgIyMgIENvbnZlcnQgcmVzdWx0IGZyb20gImlycmxpc3QiIHRvIHRpYmJsZS4gCiAgICAgICAgICAgIG11dGF0ZShvYmplY3QgPSBpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgIFJlLWluc2VydCB0aGUgb2JqZWN0IG5hbWUuCiAgICAgICAgZXhwMl9fa3JpcHBzX2FscGhhIDwtIGJpbmRfcm93cyhleHAyX19rcmlwcHNfYWxwaGEsIGV4cDJfX2tyaXBwX2NhbGMpIH0KIyMgIEZpbmFsIGVkaXRzOiAKICAgIGV4cDJfX2tyaXBwc19hbHBoYSA8LSBleHAyX19rcmlwcHNfYWxwaGEgJT4lCiAgICAgICAgbXV0YXRlX2F0KGMoInZhbHVlIiksIHJvdW5kLCAyKSAlPiUKICAgICAgICBzZWxlY3Qob2JqZWN0LCBzdWJqZWN0cywgdmFsdWUpICU+JQogICAgICAgIHJlbmFtZSgia3JpcHBlbmRvcmZmc19hbHBoYSIgPSB2YWx1ZSwgInZhcmlhdGlvbnMiID0gc3ViamVjdHMsICJjb25jZXB0IiA9IG9iamVjdCkKIyMgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KIyMgIE5hbWluZyBub3JtczoKIyMgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gCiMjICBOYW1pbmcgYWNjdXJhY3k6ICAgIAogICAgZXhwMl9fbmFtaW5nX2FjYyA8LSBleHAyX19IX3N0YXRfYWxsX2l0ZW1zICU+JQogICAgICAgIHNlbGVjdChzdGltLCBwcm9wX2NvcnJlY3QpICU+JQogICAgICAgIHVuZ3JvdXAoKQogICAgZXhwMl9fZ3JleV9uYW1pbmdfYWNjIDwtIGV4cDJfX25hbWluZ19hY2MgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICByZW5hbWUoImdyZXlfbmFtaW5nX2FjYyIgPSAicHJvcF9jb3JyZWN0IikgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fY29sX25hbWluZ19hY2MgPC0gZXhwMl9fbmFtaW5nX2FjYyAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiY29sb3VyIikpICU+JQogICAgICAgIG11dGF0ZShzdGltID0gc3RyX3JlbW92ZV9hbGwoc3RpbSwgIlstXSguKikiKSkgJT4lCiAgICAgICAgcmVuYW1lKCJjb2xfbmFtaW5nX2FjYyIgPSAicHJvcF9jb3JyZWN0IikgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fbmFtaW5nX2FjY19fdHRlc3QgPC0gdC50ZXN0KGV4cDJfX2dyZXlfbmFtaW5nX2FjYywgZXhwMl9fY29sX25hbWluZ19hY2MpCiAgICBleHAyX19hcGFfX25hbWluZ19hY2NfX3R0ZXN0IDwtIHBhcGFqYTo6OmFwYV9wcmludChleHAyX19uYW1pbmdfYWNjX190dGVzdCkKICAgIGV4cDJfX21lYW5fbmFtaW5nX2FjYyA8LSBleHAyX19uYW1pbmdfYWNjICU+JSBwdWxsKCkgJT4lIG1lYW4oKSAlPiUgcm91bmQoMikgCiAgICBleHAyX19tZWFuX2dyZXlfbmFtaW5nX2FjYyA8LSBleHAyX19ncmV5X25hbWluZ19hY2MgJT4lIHB1bGwoKSAlPiUgbWVhbigpICU+JSByb3VuZCgyKSAKICAgIGV4cDJfX21lYW5fY29sX25hbWluZ19hY2MgPC0gZXhwMl9fY29sX25hbWluZ19hY2MgJT4lIHB1bGwoKSAlPiUgbWVhbigpICU+JSByb3VuZCgyKQogICAgCiMjICBIIHN0YXQ6CiAgICBleHAyX19IX3N0YXQgPC0gZXhwMl9fSF9zdGF0X2FsbF9pdGVtcyAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgSCkgJT4lCiAgICAgICAgdW5ncm91cCgpCiAgICBleHAyX19ncmV5X0hfc3RhdCA8LSBleHAyX19IX3N0YXQgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICByZW5hbWUoImdyZXlfSCIgPSAiSCIpICU+JQogICAgICAgIHNlbGVjdCgtc3RpbSkKICAgIGV4cDJfX2NvbF9IX3N0YXQgPC0gZXhwMl9fSF9zdGF0ICU+JQogICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KHN0aW0sICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICByZW5hbWUoImNvbF9IIiA9ICJIIikgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fSF9zdGF0X190dGVzdCA8LSB0LnRlc3QoZXhwMl9fZ3JleV9IX3N0YXQsIGV4cDJfX2NvbF9IX3N0YXQpCiAgICBleHAyX19hcGFfX0hfc3RhdF9fdHRlc3QgPC0gcGFwYWphOjo6YXBhX3ByaW50KGV4cDJfX0hfc3RhdF9fdHRlc3QpCiAgICBleHAyX19tZWFuX0hfc3RhdCA8LSBleHAyX19IX3N0YXQgJT4lIHB1bGwoKSAlPiUgbWVhbigpICU+JSByb3VuZCgyKSAKICAgIGV4cDJfX21lYW5fZ3JleV9IX3N0YXQgPC0gZXhwMl9fZ3JleV9IX3N0YXQgJT4lIHB1bGwoKSAlPiUgbWVhbigpICU+JSByb3VuZCgyKSAKICAgIGV4cDJfX21lYW5fY29sX0hfc3RhdCA8LSBleHAyX19jb2xfSF9zdGF0ICU+JSBwdWxsKCkgJT4lIG1lYW4oKSAlPiUgcm91bmQoMikKCiMjICBOYW1pbmcgUlRzOiAgICAKICAgIGV4cDJfX2dyZXlfbmFtaW5nX3J0IDwtIGV4cDJfX25hbWluZ19ydCAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiZ3JleSIpKSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fY29sX25hbWluZ19ydCA8LSBleHAyX19uYW1pbmdfcnQgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImNvbG91ciIpKSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fbmFtaW5nX3J0X190dGVzdCA8LSB0LnRlc3QoZXhwMl9fZ3JleV9uYW1pbmdfcnQsIGV4cDJfX2NvbF9uYW1pbmdfcnQpCiAgICBleHAyX19hcGFfX25hbWluZ19ydF9fdHRlc3QgPC0gcGFwYWphOjo6YXBhX3ByaW50KGV4cDJfX25hbWluZ19ydF9fdHRlc3QpCiAgICBleHAyX19tZWFuX25hbWluZ19ydCA8LSBleHAyX19uYW1pbmdfcnQkbWVhbl9ydCAlPiUgbWVhbiguLCBuYS5ybSA9IFRSVUUpICU+JSByb3VuZCgyKQogICAgZXhwMl9fbWVhbl9ncmV5X25hbWluZ19ydCA8LSBleHAyX19ncmV5X25hbWluZ19ydCAlPiUgcHVsbCgpICU+JSBtZWFuKC4sIG5hLnJtID0gVFJVRSkgJT4lIHJvdW5kKDIpIAogICAgZXhwMl9fbWVhbl9jb2xfbmFtaW5nX3J0IDwtIGV4cDJfX2NvbF9uYW1pbmdfcnQgJT4lIHB1bGwoKSAlPiUgbWVhbiguLCBuYS5ybSA9IFRSVUUpICU+JSByb3VuZCgyKQogICAgCiAgICBleHAyX19ncmV5X25hbWluZ19ub3JtcyA8LSBleHAyX19IX3N0YXRfYWxsX2l0ZW1zICU+JQogICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiZ3JleSIpKSAlPiUKICAgICAgICBtdXRhdGUoZ3JleV9uYW1pbmdfYWNjX21lYW4gPSBtZWFuKHByb3BfY29ycmVjdCkpICU+JQogICAgICAgIG11dGF0ZShncmV5X25hbWluZ19hY2Nfc2QgPSBzZChwcm9wX2NvcnJlY3QpKSAlPiUKICAgICAgICBtdXRhdGUoZ3JleV9IX21lYW4gPSBtZWFuKEgpKSAlPiUKICAgICAgICBtdXRhdGUoZ3JleV9IX3NkID0gc2QoSCkpICU+JQogICAgICAgIHNlbGVjdChncmV5X25hbWluZ19hY2NfbWVhbiwgZ3JleV9uYW1pbmdfYWNjX3NkLCBncmV5X0hfbWVhbiwgZ3JleV9IX3NkKSAlPiUKICAgICAgICBkaXN0aW5jdCgpCiAgICBleHAyX19jb2xfbmFtaW5nX25vcm1zIDwtIGV4cDJfX0hfc3RhdF9hbGxfaXRlbXMgJT4lCiAgICAgICAgdW5ncm91cCgpICU+JQogICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KHN0aW0sICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKGV4cDJfX2NvbF9uYW1pbmdfYWNjX21lYW4gPSBtZWFuKHByb3BfY29ycmVjdCkpICU+JQogICAgICAgIG11dGF0ZShleHAyX19jb2xfbmFtaW5nX2FjY19zZCA9IHNkKHByb3BfY29ycmVjdCkpICU+JQogICAgICAgIG11dGF0ZShjb2xfSF9tZWFuID0gbWVhbihIKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbF9IX3NkID0gc2QoSCkpICU+JQogICAgICAgIHNlbGVjdChleHAyX19jb2xfbmFtaW5nX2FjY19tZWFuLCBleHAyX19jb2xfbmFtaW5nX2FjY19zZCwgY29sX0hfbWVhbiwgY29sX0hfc2QpICU+JQogICAgICAgIGRpc3RpbmN0KCkKICAgIAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgRmFtaWxpYXJpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZXhwMl9fZmFtX25vcm1zIDwtIGV4cDJfX3Jhd19kYXRhICU+JQogICAgICAgIHVuZ3JvdXAoKSAlPiUKICAgICAgICBtdXRhdGUoc3RpbSA9IHN0cl9yZXBsYWNlKHN0aW0sICJjb2xvdXIxIiwgImNvbG91ciIpKSAlPiUKICAgICAgICBtdXRhdGUoc3RpbSA9IHN0cl9yZXBsYWNlKHN0aW0sICJncmV5MSIsICJncmV5IikpICU+JQogICAgICAgIHNlbGVjdChzdGltLCBmYW1pbGlhcml0eSwgZmFtX3J0KSAlPiUKICAgICAgICBkcm9wX25hKGZhbWlsaWFyaXR5KSAlPiUKICAgICAgICBncm91cF9ieShzdGltKSAlPiUgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgYXJyYW5nZSAoc3RpbSwgZmFtaWxpYXJpdHkpICU+JQogICAgICAgIG11dGF0ZShmYW1fcnQgPSBzdHJfcmVtb3ZlKGZhbV9ydCwgIlxcWyIpKSAlPiUKICAgICAgICBtdXRhdGUoZmFtX3J0ID0gc3RyX3JlbW92ZShmYW1fcnQsICJcXF0iKSkgJT4lCiAgICAgICAgbXV0YXRlKGZhbV9ydCA9IHN0cl9yZW1vdmUoZmFtX3J0LCAiXFwsLioiKSkgJT4lCiAgICAgICAgbXV0YXRlKGZhbWlsaWFyaXR5ID0gc3RyX3JlbW92ZShmYW1pbGlhcml0eSwgImZhbV8iKSkgJT4lCiAgICAgICAgbXV0YXRlX2F0KHZhcnMoZmFtaWxpYXJpdHksIGZhbV9ydCksIGFzLm51bWVyaWMpICU+JQogICAgICAgIGdyb3VwX2J5KHN0aW0pICU+JQogICAgICAgIHN1bW1hcmlzZV9hbGwodGliYmxlOjpsc3QobWVhbiksIG5hLnJtID0gVFJVRSkKIyMgIEdyZXkgcGhvdG9ncmFwaHM6CiAgICBleHAyX19ncmV5X2ZhbV9tZWFucyA8LSBleHAyX19mYW1fbm9ybXMgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKGdyZXlfZmFtX21lYW4gPSBtZWFuKGZhbWlsaWFyaXR5X21lYW4pKSAlPiUKICAgICAgICBtdXRhdGUoZ3JleV9mYW1fc2QgPSBzZChmYW1pbGlhcml0eV9tZWFuKSkgJT4lCiAgICAgICAgbXV0YXRlKGdyZXlfZmFtX21lYW5fcnQgPSBtZWFuKGZhbV9ydF9tZWFuKSkgJT4lCiAgICAgICAgbXV0YXRlKGdyZXlfZmFtX3NkX3J0ID0gc2QoZmFtX3J0X21lYW4pKSAlPiUKICAgICAgICBzZWxlY3QoZ3JleV9mYW1fbWVhbiwgZ3JleV9mYW1fc2QsIGdyZXlfZmFtX21lYW5fcnQsIGdyZXlfZmFtX3NkX3J0KSAlPiUKICAgICAgICBkaXN0aW5jdCgpCiMjICBDb2xvdXIgcGhvdG9ncmFwaHM6CiAgICBleHAyX19jb2xfZmFtX21lYW5zIDwtIGV4cDJfX2ZhbV9ub3JtcyAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiY29sIikpICU+JQogICAgICAgIG11dGF0ZShjb2xfZmFtX21lYW4gPSBtZWFuKGZhbWlsaWFyaXR5X21lYW4pKSAlPiUKICAgICAgICBtdXRhdGUoY29sX2ZhbV9zZCA9IHNkKGZhbWlsaWFyaXR5X21lYW4pKSAlPiUKICAgICAgICBtdXRhdGUoY29sX2ZhbV9tZWFuX3J0ID0gbWVhbihmYW1fcnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShjb2xfZmFtX3NkX3J0ID0gc2QoZmFtX3J0X21lYW4pKSAlPiUKICAgICAgICBzZWxlY3QoY29sX2ZhbV9tZWFuLCBjb2xfZmFtX3NkLCBjb2xfZmFtX21lYW5fcnQsIGNvbF9mYW1fc2RfcnQpICU+JQogICAgICAgIGRpc3RpbmN0KCkKIyMgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KIyMgIEZhbWlsaWFyaXR5IGFuYWx5c2lzOgojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQogICAgZXhwMl9fZmFtIDwtIGV4cDJfX2ZhbV9ub3JtcyAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgZmFtaWxpYXJpdHlfbWVhbiwgZmFtX3J0X21lYW4pICU+JQogICAgICAgIHVuZ3JvdXAoKQogICAgZXhwMl9fbWVhbl9mYW0gPC0gZXhwMl9fZmFtJGZhbWlsaWFyaXR5X21lYW4gJT4lIG1lYW4oKSAlPiUgcm91bmQoMikKICAgIGV4cDJfX21lYW5fZmFtX3J0IDwtIGV4cDJfX2ZhbSRmYW1fcnRfbWVhbiAlPiUgbWVhbigpICU+JSByb3VuZCgyKQoKICAgIGV4cDJfX2dyZXlfZmFtIDwtIGV4cDJfX2ZhbV9ub3JtcyAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiZ3JleSIpKSAlPiUKICAgICAgICBtdXRhdGUoc3RpbSA9IHN0cl9yZW1vdmVfYWxsKHN0aW0sICJbLV0oLiopIikpICU+JQogICAgICAgIHJlbmFtZSgiZ3JleV9mYW0iID0gImZhbWlsaWFyaXR5X21lYW4iKSAlPiUKICAgICAgICByZW5hbWUoImdyZXlfZmFtX3J0IiA9ICJmYW1fcnRfbWVhbiIpICU+JQogICAgICAgIHNlbGVjdCgtc3RpbSkKICAgIGV4cDJfX21lYW5fZ3JleV9mYW0gPC0gZXhwMl9fZ3JleV9mYW0kZ3JleV9mYW0gJT4lIG1lYW4oKSAlPiUgcm91bmQoMikgCiAgICBleHAyX19tZWFuX2dyZXlfZmFtX3J0IDwtIGV4cDJfX2dyZXlfZmFtJGdyZXlfZmFtX3J0ICU+JSBtZWFuKCkgJT4lIHJvdW5kKDIpIAoKICAgIGV4cDJfX2NvbF9mYW0gPC0gZXhwMl9fZmFtX25vcm1zICU+JQogICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KHN0aW0sICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICByZW5hbWUoImNvbF9mYW0iID0gImZhbWlsaWFyaXR5X21lYW4iKSAlPiUKICAgICAgICByZW5hbWUoImNvbF9mYW1fcnQiID0gImZhbV9ydF9tZWFuIikgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fbWVhbl9jb2xfZmFtIDwtIGV4cDJfX2NvbF9mYW0kY29sX2ZhbSAlPiUgbWVhbigpICU+JSByb3VuZCgyKQogICAgZXhwMl9fbWVhbl9jb2xfZmFtX3J0IDwtIGV4cDJfX2NvbF9mYW0kY29sX2ZhbV9ydCAlPiUgbWVhbigpICU+JSByb3VuZCgyKQoKICAgIGV4cDJfX2ZhbV9fdHRlc3QgPC0gdC50ZXN0KGV4cDJfX2dyZXlfZmFtJGdyZXlfZmFtLCBleHAyX19jb2xfZmFtJGNvbF9mYW0pCiAgICBleHAyX19hcGFfX2ZhbV9fdHRlc3QgPC0gcGFwYWphOjo6YXBhX3ByaW50KGV4cDJfX2ZhbV9fdHRlc3QpCiAgICBleHAyX19mYW1fcnRfX3R0ZXN0IDwtIHQudGVzdChleHAyX19ncmV5X2ZhbSRncmV5X2ZhbV9ydCwgZXhwMl9fY29sX2ZhbSRjb2xfZmFtX3J0KQogICAgZXhwMl9fYXBhX19mYW1fcnRfX3R0ZXN0IDwtIHBhcGFqYTo6OmFwYV9wcmludChleHAyX19mYW1fcnRfX3R0ZXN0KQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgVmlzdWFsIENvbXBsZXhpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZXhwMl9fdmlzX2NvbV9ub3JtcyA8LSBleHAyX19yYXdfZGF0YSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiY29sb3VyMSIsICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiZ3JleTEiLCAiZ3JleSIpKSAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgdmlzdWFsY29tcGxleGl0eSwgdmlzY29tX3J0KSAlPiUKICAgICAgICBkcm9wX25hKHZpc3VhbGNvbXBsZXhpdHkpICU+JQogICAgICAgIGdyb3VwX2J5KHN0aW0pICU+JSAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBhcnJhbmdlIChzdGltLCB2aXN1YWxjb21wbGV4aXR5KSAlPiUKICAgICAgICBtdXRhdGUodmlzY29tX3J0ID0gc3RyX3JlbW92ZSh2aXNjb21fcnQsICJcXFsiKSkgJT4lCiAgICAgICAgbXV0YXRlKHZpc2NvbV9ydCA9IHN0cl9yZW1vdmUodmlzY29tX3J0LCAiXFxdIikpICU+JQogICAgICAgIG11dGF0ZSh2aXNjb21fcnQgPSBzdHJfcmVtb3ZlKHZpc2NvbV9ydCwgIlxcLC4qIikpICU+JQogICAgICAgIG11dGF0ZSh2aXN1YWxjb21wbGV4aXR5ID0gc3RyX3JlbW92ZSh2aXN1YWxjb21wbGV4aXR5LCAidmlzY29tXyIpKSAlPiUKICAgICAgICBtdXRhdGVfYXQodmFycyh2aXN1YWxjb21wbGV4aXR5LCB2aXNjb21fcnQpLCBhcy5udW1lcmljKSAlPiUKICAgICAgICBncm91cF9ieShzdGltKSAlPiUKICAgICAgICBzdW1tYXJpc2VfYWxsKHRpYmJsZTo6bHN0KG1lYW4pLCBuYS5ybSA9IFRSVUUpCiMjICBHcmV5IHBob3RvZ3JhcGhzOgogICAgZXhwMl9fZ3JleV92aXNfY29tX21lYW5zIDwtIGV4cDJfX3Zpc19jb21fbm9ybXMgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKGV4cDJfX2dyZXlfdmlzX2NvbV9tZWFuID0gbWVhbih2aXN1YWxjb21wbGV4aXR5X21lYW4pKSAlPiUKICAgICAgICBtdXRhdGUoZXhwMl9fZ3JleV92aXNfY29tX3NkID0gc2QodmlzdWFsY29tcGxleGl0eV9tZWFuKSkgJT4lCiAgICAgICAgbXV0YXRlKGV4cDJfX2dyZXlfdmlzX2NvbV9tZWFuX3J0ID0gbWVhbih2aXNjb21fcnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShleHAyX19ncmV5X3Zpc19jb21fc2RfcnQgPSBzZCh2aXNjb21fcnRfbWVhbikpICU+JQogICAgICAgIHNlbGVjdChleHAyX19ncmV5X3Zpc19jb21fbWVhbiwgZXhwMl9fZ3JleV92aXNfY29tX3NkLCBleHAyX19ncmV5X3Zpc19jb21fbWVhbl9ydCwgZXhwMl9fZ3JleV92aXNfY29tX3NkX3J0KSAlPiUKICAgICAgICBkaXN0aW5jdCgpCiMjICBDb2xvdXIgcGhvdG9ncmFwaHM6CiAgICBleHAyX19jb2xfdmlzX2NvbV9tZWFucyA8LSBleHAyX192aXNfY29tX25vcm1zICU+JQogICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KHN0aW0sICJjb2wiKSkgJT4lCiAgICAgICAgbXV0YXRlKGV4cDJfX2NvbF92aXNfY29tX21lYW4gPSBtZWFuKHZpc3VhbGNvbXBsZXhpdHlfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShleHAyX19jb2xfdmlzX2NvbV9zZCA9IHNkKHZpc3VhbGNvbXBsZXhpdHlfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShleHAyX19jb2xfdmlzX2NvbV9tZWFuX3J0ID0gbWVhbih2aXNjb21fcnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShleHAyX19jb2xfdmlzX2NvbV9zZF9ydCA9IHNkKHZpc2NvbV9ydF9tZWFuKSkgJT4lCiAgICAgICAgc2VsZWN0KGV4cDJfX2NvbF92aXNfY29tX21lYW4sIGV4cDJfX2NvbF92aXNfY29tX3NkLCBleHAyX19jb2xfdmlzX2NvbV9tZWFuX3J0LCBleHAyX19jb2xfdmlzX2NvbV9zZF9ydCkgJT4lCiAgICAgICAgZGlzdGluY3QoKQojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQojIyAgVmlzdWFsIENvbXBsZXhpdHkgYW5hbHlzaXM6CiMjICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCiAgICBleHAyX192aXNfY29tIDwtIGV4cDJfX3Zpc19jb21fbm9ybXMgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIHZpc3VhbGNvbXBsZXhpdHlfbWVhbiwgdmlzY29tX3J0X21lYW4pICU+JQogICAgICAgIHVuZ3JvdXAoKQogICAgZXhwMl9fbWVhbl92aXNjb21fcnQgPC0gZXhwMl9fdmlzX2NvbSR2aXN1YWxjb21wbGV4aXR5X21lYW4gJT4lIG1lYW4oKSAlPiUgcm91bmQoMikKICAgIGV4cDJfX21lYW5fdmlzY29tX3J0IDwtIGV4cDJfX3Zpc19jb20kdmlzY29tX3J0X21lYW4gJT4lIG1lYW4oKSAlPiUgcm91bmQoMikKCiAgICBleHAyX19ncmV5X3Zpc19jb20gPC0gZXhwMl9fdmlzX2NvbV9ub3JtcyAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiZ3JleSIpKSAlPiUKICAgICAgICBtdXRhdGUoc3RpbSA9IHN0cl9yZW1vdmVfYWxsKHN0aW0sICJbLV0oLiopIikpICU+JQogICAgICAgIHJlbmFtZSgiZXhwMl9fZ3JleV92aXNfY29tIiA9ICJ2aXN1YWxjb21wbGV4aXR5X21lYW4iKSAlPiUKICAgICAgICByZW5hbWUoImdyZXlfdmlzY29tX3J0IiA9ICJ2aXNjb21fcnRfbWVhbiIpICU+JQogICAgICAgIHNlbGVjdCgtc3RpbSkKICAgIGV4cDJfX21lYW5fZ3JleV92aXNfY29tIDwtIGV4cDJfX2dyZXlfdmlzX2NvbSRleHAyX19ncmV5X3Zpc19jb20gJT4lIG1lYW4oKSAlPiUgcm91bmQoMikgCiAgICBleHAyX19tZWFuX2dyZXlfdmlzY29tX3J0IDwtIGV4cDJfX2dyZXlfdmlzX2NvbSRncmV5X3Zpc2NvbV9ydCAlPiUgbWVhbigpICU+JSByb3VuZCgyKSAKCiAgICBleHAyX19jb2xfdmlzX2NvbSA8LSBleHAyX192aXNfY29tX25vcm1zICU+JQogICAgICAgIGZpbHRlcihzdHJfZGV0ZWN0KHN0aW0sICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICByZW5hbWUoImV4cDJfX2NvbF92aXNfY29tIiA9ICJ2aXN1YWxjb21wbGV4aXR5X21lYW4iKSAlPiUKICAgICAgICByZW5hbWUoImNvbF92aXNjb21fcnQiID0gInZpc2NvbV9ydF9tZWFuIikgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fbWVhbl9jb2xfdmlzX2NvbSA8LSBleHAyX19jb2xfdmlzX2NvbSRleHAyX19jb2xfdmlzX2NvbSAlPiUgbWVhbigpICU+JSByb3VuZCgyKQogICAgZXhwMl9fbWVhbl9jb2xfdmlzY29tX3J0IDwtIGV4cDJfX2NvbF92aXNfY29tJGNvbF92aXNjb21fcnQgJT4lIG1lYW4oKSAlPiUgcm91bmQoMikKCiAgICBleHAyX192aXNfY29tX190dGVzdCA8LSB0LnRlc3QoZXhwMl9fZ3JleV92aXNfY29tJGV4cDJfX2dyZXlfdmlzX2NvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHAyX19jb2xfdmlzX2NvbSRleHAyX19jb2xfdmlzX2NvbSkKICAgIGV4cDJfX2FwYV9fdmlzX2NvbV9fdHRlc3QgPC0gcGFwYWphOjo6YXBhX3ByaW50KGV4cDJfX3Zpc19jb21fX3R0ZXN0KQogICAgZXhwMl9fdmlzX2NvbV9ydF9fdHRlc3QgPC0gdC50ZXN0KGV4cDJfX2dyZXlfdmlzX2NvbSRncmV5X3Zpc2NvbV9ydCwgZXhwMl9fY29sX3Zpc19jb20kY29sX3Zpc2NvbV9ydCkKICAgIGV4cDJfX2FwYV9fdmlzX2NvbV9ydF9fdHRlc3QgPC0gcGFwYWphOjo6YXBhX3ByaW50KGV4cDJfX3Zpc19jb21fcnRfX3R0ZXN0KSAgICAKICAgIAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgTWVudGFsIGltYWdlcnkgYWdyZWVtZW50OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZXhwMl9fbWVuX2ltYV9ub3JtcyA8LSBleHAyX19yYXdfZGF0YSAlPiUKIyMgIFNvZnR3YXJlIGVycm9yOiB0aGVzZSBwYXJ0aWNpcGFudHMgd2VyZSBhc2tlZCBDb2xEaWEgcXVlc3Rpb24gZm9yIGdyZXkgYW5kIGNvbG91ciBzdGltLiBUaGlzIG11c3QgaGF2ZSBiZWVuCiMjICBjb25mdXNpbmcsIHNvIHdlIHJlbW92ZSB0aGVpciBDb2xEaWEgZGF0YSBjb21wbGV0ZWx5LiAgCiAgICAgICAgZmlsdGVyKGlkICE9ICI1NmEzMjExZWRiZTg1MDAwMGJmY2VkYzYiIHwgaWQgIT0gIjU1YjU2N2ZiZmRmOTliNGExMWRmMzNiOSIgfAogICAgICAgICAgICAgICBpZCAhPSAiNTliNTlkNTlmNjlmMzQwMDAxODY3NDU0IiB8IGlkICE9ICI1OWU0NmZlYjE2ZWNjMjAwMDE2ZmVmNjEiIHwKICAgICAgICAgICAgICAgaWQgIT0gIjViZWJkNDExMTI5NjkyMDAwMWQ1NWM1YSIgfCBpZCAhPSAiNWM2MjA1YTcyNGIxZmMwMDAxOWRiMmRlIiB8CiAgICAgICAgICAgICAgIGlkICE9ICI1ZDA2NTFjNTdjMzdiZjAwMWE5ODdkYzIiIHwgaWQgIT0gIjVkMjljNjcxYmM1NzNiMDAxNjVjOTAxNCIgfAogICAgICAgICAgICAgICBpZCAhPSAiNWQ1MWMwZWZiYmIxYWEwMDE3MGRiNmM4IiB8IGlkICE9ICI1ZDU0MmMzYTVhZjU5MDAwMTliYzgwYzQiKSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiY29sb3VyMSIsICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiZ3JleTEiLCAiZ3JleSIpKSAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgbWVudGFsaW1hZ2VyeWFncmVlbWVudCwgbWVuaW1hX3J0KSAlPiUKICAgICAgICBkcm9wX25hKG1lbnRhbGltYWdlcnlhZ3JlZW1lbnQpICU+JQogICAgICAgIGdyb3VwX2J5KHN0aW0pICU+JSAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBhcnJhbmdlIChzdGltLCBtZW50YWxpbWFnZXJ5YWdyZWVtZW50KSAlPiUKICAgICAgICBtdXRhdGUobWVuaW1hX3J0ID0gc3RyX3JlbW92ZShtZW5pbWFfcnQsICJcXFsiKSkgJT4lCiAgICAgICAgbXV0YXRlKG1lbmltYV9ydCA9IHN0cl9yZW1vdmUobWVuaW1hX3J0LCAiXFxdIikpICU+JQogICAgICAgIG11dGF0ZShtZW5pbWFfcnQgPSBzdHJfcmVtb3ZlKG1lbmltYV9ydCwgIlxcLC4qIikpICU+JQogICAgICAgIG11dGF0ZShtZW50YWxpbWFnZXJ5YWdyZWVtZW50ID0gc3RyX3JlbW92ZShtZW50YWxpbWFnZXJ5YWdyZWVtZW50LCAibWVuaW1hXyIpKSAlPiUKICAgICAgICBtdXRhdGVfYXQodmFycyhtZW50YWxpbWFnZXJ5YWdyZWVtZW50LCBtZW5pbWFfcnQpLCBhcy5udW1lcmljKSAlPiUKICAgICAgICBncm91cF9ieShzdGltKSAlPiUKICAgICAgICBzdW1tYXJpc2VfYWxsKHRpYmJsZTo6bHN0KG1lYW4pLCBuYS5ybSA9IFRSVUUpCiMjICBHcmV5IHBob3RvZ3JhcGhzOgogICAgZXhwMl9fZ3JleV9tZW5faW1hX21lYW5zIDwtIGV4cDJfX21lbl9pbWFfbm9ybXMgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKGdyZXlfbWVuaW1hX21lYW4gPSBtZWFuKG1lbnRhbGltYWdlcnlhZ3JlZW1lbnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShncmV5X21lbmltYV9zZCA9IHNkKG1lbnRhbGltYWdlcnlhZ3JlZW1lbnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShncmV5X21lbmltYV9tZWFuX3J0ID0gbWVhbihtZW5pbWFfcnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShncmV5X21lbmltYV9zZF9ydCA9IHNkKG1lbmltYV9ydF9tZWFuKSkgJT4lCiAgICAgICAgc2VsZWN0KGdyZXlfbWVuaW1hX21lYW4sIGdyZXlfbWVuaW1hX3NkLCBncmV5X21lbmltYV9tZWFuX3J0LCBncmV5X21lbmltYV9zZF9ydCkgJT4lCiAgICAgICAgZGlzdGluY3QoKQojIyAgQ29sb3VyIHBob3RvZ3JhcGhzOgogICAgZXhwMl9fY29sX2V4cDJfX21lbl9pbWFfbWVhbnMgPC0gZXhwMl9fbWVuX2ltYV9ub3JtcyAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiY29sb3VyIikpICU+JQogICAgICAgIG11dGF0ZShjb2xfbWVuaW1hX21lYW4gPSBtZWFuKG1lbnRhbGltYWdlcnlhZ3JlZW1lbnRfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShjb2xfbWVuaW1hX3NkID0gc2QobWVudGFsaW1hZ2VyeWFncmVlbWVudF9tZWFuKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbF9tZW5pbWFfbWVhbl9ydCA9IG1lYW4obWVuaW1hX3J0X21lYW4pKSAlPiUKICAgICAgICBtdXRhdGUoY29sX21lbmltYV9zZF9ydCA9IHNkKG1lbmltYV9ydF9tZWFuKSkgJT4lCiAgICAgICAgc2VsZWN0KGNvbF9tZW5pbWFfbWVhbiwgY29sX21lbmltYV9zZCwgY29sX21lbmltYV9tZWFuX3J0LCBjb2xfbWVuaW1hX3NkX3J0KSAlPiUKICAgICAgICBkaXN0aW5jdCgpCiMjICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCiMjICBNZW50YWwgaW1hZ2VyeSBhbmFseXNpczoKIyMgIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KICAgIGV4cDJfX21lbl9pbWEgPC0gZXhwMl9fbWVuX2ltYV9ub3JtcyAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgbWVudGFsaW1hZ2VyeWFncmVlbWVudF9tZWFuLCBtZW5pbWFfcnRfbWVhbikgJT4lCiAgICAgICAgdW5ncm91cCgpCiAgICBleHAyX19tZWFuX21lbl9pbWEgPC0gZXhwMl9fbWVuX2ltYSRtZW50YWxpbWFnZXJ5YWdyZWVtZW50X21lYW4gJT4lIG1lYW4oKSAlPiUgcm91bmQoMikKICAgIGV4cDJfX21lYW5fbWVuX2ltYV9ydCA8LSBleHAyX19tZW5faW1hJG1lbmltYV9ydF9tZWFuICU+JSBtZWFuKCkgJT4lIHJvdW5kKDIpCgogICAgZXhwMl9fZ3JleV9tZW5faW1hIDwtIGV4cDJfX21lbl9pbWFfbm9ybXMgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImdyZXkiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVtb3ZlX2FsbChzdGltLCAiWy1dKC4qKSIpKSAlPiUKICAgICAgICByZW5hbWUoImV4cDJfX2dyZXlfbWVuX2ltYSIgPSAibWVudGFsaW1hZ2VyeWFncmVlbWVudF9tZWFuIikgJT4lCiAgICAgICAgcmVuYW1lKCJleHAyX19ncmV5X21lbl9pbWFfcnQiID0gIm1lbmltYV9ydF9tZWFuIikgJT4lCiAgICAgICAgc2VsZWN0KC1zdGltKQogICAgZXhwMl9fbWVhbl9ncmV5X21lbl9pbWEgPC0gZXhwMl9fZ3JleV9tZW5faW1hJGV4cDJfX2dyZXlfbWVuX2ltYSAlPiUgbWVhbigpICU+JSByb3VuZCgyKSAKICAgIGV4cDJfX21lYW5fZ3JleV9tZW5faW1hX3J0IDwtIGV4cDJfX2dyZXlfbWVuX2ltYSRleHAyX19ncmV5X21lbl9pbWFfcnQgJT4lIG1lYW4oKSAlPiUgcm91bmQoMikgCgogICAgZXhwMl9fY29sX2V4cDJfX21lbl9pbWEgPC0gZXhwMl9fbWVuX2ltYV9ub3JtcyAlPiUKICAgICAgICBmaWx0ZXIoc3RyX2RldGVjdChzdGltLCAiY29sb3VyIikpICU+JQogICAgICAgIG11dGF0ZShzdGltID0gc3RyX3JlbW92ZV9hbGwoc3RpbSwgIlstXSguKikiKSkgJT4lCiAgICAgICAgcmVuYW1lKCJjb2xfZXhwMl9fbWVuX2ltYSIgPSAibWVudGFsaW1hZ2VyeWFncmVlbWVudF9tZWFuIikgJT4lCiAgICAgICAgcmVuYW1lKCJjb2xfZXhwMl9fbWVuX2ltYV9ydCIgPSAibWVuaW1hX3J0X21lYW4iKSAlPiUKICAgICAgICBzZWxlY3QoLXN0aW0pCiAgICBleHAyX19tZWFuX2NvbF9tZW5faW1hIDwtIGV4cDJfX2NvbF9leHAyX19tZW5faW1hJGNvbF9leHAyX19tZW5faW1hICU+JSBtZWFuKCkgJT4lIHJvdW5kKDIpCiAgICBleHAyX19tZWFuX2NvbF9tZW5faW1hX3J0IDwtIGV4cDJfX2NvbF9leHAyX19tZW5faW1hJGNvbF9leHAyX19tZW5faW1hX3J0ICU+JSBtZWFuKCkgJT4lIHJvdW5kKDIpCgogICAgZXhwMl9fbWVuX2ltYV9fdHRlc3QgPC0gdC50ZXN0KGV4cDJfX2dyZXlfbWVuX2ltYSRleHAyX19ncmV5X21lbl9pbWEsIGV4cDJfX2NvbF9leHAyX19tZW5faW1hJGNvbF9leHAyX19tZW5faW1hKQogICAgZXhwMl9fYXBhX19leHAyX19tZW5faW1hX190dGVzdCA8LSBwYXBhamE6OjphcGFfcHJpbnQoZXhwMl9fbWVuX2ltYV9fdHRlc3QpCiAgICBleHAyX19tZW5faW1hX3J0X190dGVzdCA8LSB0LnRlc3QoZXhwMl9fZ3JleV9tZW5faW1hJGV4cDJfX2dyZXlfbWVuX2ltYV9ydCwgZXhwMl9fY29sX2V4cDJfX21lbl9pbWEkY29sX2V4cDJfX21lbl9pbWFfcnQpCiAgICBleHAyX19hcGFfX2V4cDJfX21lbl9pbWFfcnRfX3R0ZXN0IDwtIHBhcGFqYTo6OmFwYV9wcmludChleHAyX19tZW5faW1hX3J0X190dGVzdCkKICAgIAojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgQ29sb3VyIGRpYWdub3N0aWNpdHk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgZXhwMl9fY29sX2RpYV9ub3JtcyA8LSBleHAyX19yYXdfZGF0YSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiY29sb3VyMSIsICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiZ3JleTEiLCAiZ3JleSIpKSAlPiUKICAgICAgICBzZWxlY3Qoc3RpbSwgY29sb3VyZGlhZ25vc3RpY2l0eSwgY29sZGlhX3J0KSAlPiUKICAgICAgICBkcm9wX25hKGNvbG91cmRpYWdub3N0aWNpdHkpICU+JQogICAgICAgIGdyb3VwX2J5KHN0aW0pICU+JSAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICBhcnJhbmdlIChzdGltLCBjb2xvdXJkaWFnbm9zdGljaXR5KSAlPiUKICAgICAgICBtdXRhdGUoY29sZGlhX3J0ID0gc3RyX3JlbW92ZShjb2xkaWFfcnQsICJcXFsiKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbGRpYV9ydCA9IHN0cl9yZW1vdmUoY29sZGlhX3J0LCAiXFxdIikpICU+JQogICAgICAgIG11dGF0ZShjb2xkaWFfcnQgPSBzdHJfcmVtb3ZlKGNvbGRpYV9ydCwgIlxcLC4qIikpICU+JQogICAgICAgIG11dGF0ZShjb2xvdXJkaWFnbm9zdGljaXR5ID0gc3RyX3JlbW92ZShjb2xvdXJkaWFnbm9zdGljaXR5LCAiY29sZGlhXyIpKSAlPiUKICAgICAgICBtdXRhdGVfYXQodmFycyhjb2xvdXJkaWFnbm9zdGljaXR5LCBjb2xkaWFfcnQpLCBhcy5udW1lcmljKSAlPiUKICAgICAgICBncm91cF9ieShzdGltKSAlPiUKICAgICAgICBzdW1tYXJpc2VfYWxsKHRpYmJsZTo6bHN0KG1lYW4pLCBuYS5ybSA9IFRSVUUpCiMjICBDb2xvdXIgcGhvdG9ncmFwaHM6CiAgICBleHAyX19jb2xfZGlhX21lYW5zIDwtIGV4cDJfX2NvbF9kaWFfbm9ybXMgJT4lCiAgICAgICAgZmlsdGVyKHN0cl9kZXRlY3Qoc3RpbSwgImNvbG91ciIpKSAlPiUKICAgICAgICBtdXRhdGUoY29sX2NvbGRpYV9tZWFuID0gbWVhbihjb2xvdXJkaWFnbm9zdGljaXR5X21lYW4pKSAlPiUKICAgICAgICBtdXRhdGUoY29sX2NvbGRpYV9zZCA9IHNkKGNvbG91cmRpYWdub3N0aWNpdHlfbWVhbikpICU+JQogICAgICAgIG11dGF0ZShjb2xfY29sZGlhX21lYW5fcnQgPSBtZWFuKGNvbGRpYV9ydF9tZWFuKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbF9jb2xkaWFfc2RfcnQgPSBzZChjb2xkaWFfcnRfbWVhbikpICU+JQogICAgICAgIHNlbGVjdChjb2xfY29sZGlhX21lYW4sIGNvbF9jb2xkaWFfc2QsIGNvbF9jb2xkaWFfbWVhbl9ydCwgY29sX2NvbGRpYV9zZF9ydCkgJT4lCiAgICAgICAgZGlzdGluY3QoKQojIyAgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQojIyAgQ29sb3VyIGRpYWdub3N0aWNpdHkgYW5hbHlzaXM6CiMjICAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCiAgICBleHAyX19jb2xfZGlhIDwtIGV4cDJfX2NvbF9kaWFfbm9ybXMgJT4lCiAgICAgICAgc2VsZWN0KHN0aW0sIGNvbG91cmRpYWdub3N0aWNpdHlfbWVhbiwgY29sZGlhX3J0X21lYW4pICU+JQogICAgICAgIHVuZ3JvdXAoKQogICAgZXhwMl9fbWVhbl9jb2xfZGlhIDwtIGV4cDJfX2NvbF9kaWEkY29sb3VyZGlhZ25vc3RpY2l0eV9tZWFuICU+JSBtZWFuKCkgJT4lIHJvdW5kKDIpCiAgICBleHAyX19tZWFuX2NvbF9kaWFfcnQgPC0gZXhwMl9fY29sX2RpYSRjb2xkaWFfcnRfbWVhbiAlPiUgbWVhbigpICU+JSByb3VuZCgyKQpgYGAKClxuZXdwYWdlCiMjIE1ldGhvZApgYGB7ciBleHAyLS1hZ2UtZ2VuZGVyLS10YWJsZWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICB0YWJsZV9udW1iZXJpbmcobmFtZSA9ICJleHAyLS1hZ2UtZ2VuZGVyLS10YWJsZWNhcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJHZW5kZXIgYW5kIGFnZSAoKlNEKikgb2YgdGhlIGN1cnJlbnQgc2FtcGxlLiIpCmBgYAojIyMgUGFydGljaXBhbnRzCkEgdG90YWwgb2YgYHIgbnJvdyhleHAyX19wYXJ0aWNpcGFudHMpYCBzdWJqZWN0cyBjb21wbGV0ZWQgdGhlIG9ubGluZSBleHBlcmltZW50IChzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyLS1hZ2UtZ2VuZGVyLS10YWJsZWNhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWAgZm9yIGEgYnJlYWtkb3duIG9mIHRoZSBnZW5kZXIgYW5kIGFnZSBvZiB0aGUgc2FtcGxlKS4gVGhpcyBzYW1wbGUgc2l6ZSBwcm92aWRlZCAyMCBkYXRhIHBvaW50cyBmb3IgZWFjaCBvZiB0aGUgZml2ZSByZXNwb25zZSB0eXBlcywgd2hpbGUgYWxzbyBlbnN1cmluZyB0aGUgZXhwZXJpbWVudCBkaWQgbm90IGxhc3QgdG9vIGxvbmcgZm9yIHBhcnRpY2lwYW50cyAoYXBwcm94IDI1LW1pbnMpLiBTdWJqZWN0cyB3ZXJlIHJlY3J1aXRlZCBmcm9tIGJvdGggdm9sdW50YXJ5IHBhcnRpY2lwYXRpb24gd2Vic2l0ZXMgc3VjaCBhcyBcaHJlZntodHRwczovL3d3dy5wcm9saWZpYy5jby99e1Byb2xpZmljIEFjYWRlbWljfSAod2hlcmUgdGhleSByZWNlaXZlZCBwYXltZW50IGF0IHRoZSByYXRlIG9mIMKjNS9ociksIGFuZCB2aWEgdGhlIGluLXNjaG9vbCBcaHJlZntodHRwczovL2tlZWxlcHN5Y2hvbG9neS5zb25hLXN5c3RlbXMuY29tL317cmVzZWFyY2ggcGFydGljaXBhdGlvbiBzeXN0ZW19ICh3aGVyZSB0aGV5IHJlY2VpdmVkIGNvdXJzZSBwYXJ0aWNpcGF0aW9uIGNyZWRpdHMpLgoKYGBge3IgZXhwMi1hZ2UtZ2VuZC10YWJsZS1kYXRhLCBpbmNsdWRlPUZBTFNFLCBjYWNoZT1UUlVFfQpleHAyX19hZ2VfZ2VuZGVyIDwtIGV4cDJfX3BhcnRpY2lwYW50cyAlPiUKICBzZWxlY3QoYWdlLCBnZW5kZXIpICU+JQogIG11dGF0ZShhZ2UgPSBhcy5kb3VibGUoYWdlKSkKCmV4cDJfX2FnZV9nZW5kZXJfdGFibGUgPC0gdHJpYmJsZSgKICB+IkdlbmRlciIsIH5OLCB+QWdlLCB+IiIsCiAgIkZlbWFsZSIsCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAiZmVtYWxlIikgJT4lIG5yb3coKSwKICBleHAyX19hZ2VfZ2VuZGVyICU+JSBmaWx0ZXIoZ2VuZGVyID09ICJmZW1hbGUiKSAlPiUgc3VtbWFyaXNlKG1lYW4oYWdlKSkgJT4lIHB1bGwoKSAlPiUgcm91bmQgKDIpLAogIHN0cl9jKCIoIixleHAyX19hZ2VfZ2VuZGVyICU+JSBmaWx0ZXIoZ2VuZGVyID09ICJmZW1hbGUiKSAlPiUgc3VtbWFyaXNlKHNkKGFnZSkpICU+JSBwdWxsKCkKICAgICAgICAlPiUgcm91bmQgKDIpICU+JSBhcy5jaGFyYWN0ZXIoKSwgIikiKSwKICAiTWFsZSIsCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAibWFsZSIpICU+JSBucm93KCksCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAibWFsZSIpICU+JSBzdW1tYXJpc2UobWVhbihhZ2UpKSAlPiUgcHVsbCgpICU+JSByb3VuZCAoMiksCiAgc3RyX2MoIigiLGV4cDJfX2FnZV9nZW5kZXIgJT4lIGZpbHRlcihnZW5kZXIgPT0gIm1hbGUiKSAlPiUgc3VtbWFyaXNlKHNkKGFnZSkpICU+JSBwdWxsKCkKICAgICAgICAlPiUgcm91bmQgKDIpICU+JSBhcy5jaGFyYWN0ZXIoKSwgIikiKSwKICAiTm9uLWJpbmFyeSIsCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAibm9uLWJpbmFyeSIpICU+JSBucm93KCksCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAibm9uLWJpbmFyeSIpICU+JSBzdW1tYXJpc2UobWVhbihhZ2UpKSAlPiUgcHVsbCgpLAogICIoLSkiLAogICJVbnNwZWNpZmllZCIsCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAidW5zcGVjaWZpZWQiKSAlPiUgbnJvdygpLAogIGV4cDJfX2FnZV9nZW5kZXIgJT4lIGZpbHRlcihnZW5kZXIgPT0gInVuc3BlY2lmaWVkIikgJT4lIHN1bW1hcmlzZShtZWFuKGFnZSkpICU+JSBwdWxsKCksCiAgc3RyX2MoIigiLGV4cDJfX2FnZV9nZW5kZXIgJT4lIGZpbHRlcihnZW5kZXIgPT0gInVuc3BlY2lmaWVkIikgJT4lIHN1bW1hcmlzZShzZChhZ2UpKSAlPiUgcHVsbCgpCiAgICAgICAgJT4lIHJvdW5kICgyKSAlPiUgYXMuY2hhcmFjdGVyKCksICIpIiksCiAgIlRvdGFsIiwKICBleHAyX19hZ2VfZ2VuZGVyICU+JSBucm93KCksCiAgZXhwMl9fYWdlX2dlbmRlciAlPiUgc3VtbWFyaXNlKG1lYW4oYWdlKSkgJT4lIHB1bGwoKSAlPiUgcm91bmQgKDIpLAogIHN0cl9jKCIoIixleHAyX19hZ2VfZ2VuZGVyICU+JSBzdW1tYXJpc2Uoc2QoYWdlKSkgJT4lIHB1bGwoKSAlPiUgcm91bmQgKDIpICU+JSBhcy5jaGFyYWN0ZXIoKSwiKSIpKQoKZXhwMl9fbl9lbmdfbGFuZyA8LSBucm93KGV4cDJfX3BhcnRpY2lwYW50cyAlPiUgZmlsdGVyKGVuZ2xpc2hmaXJzdGxhbmcgPT0gInllcyIpKQpleHAyX19uX2VuZ19sYW5nIDwtIHJvdW5kKChleHAyX19uX2VuZ19sYW5nIC8gbnJvdyhleHAyX19wYXJ0aWNpcGFudHMpKSAqIDEwMCwgMikKYGBgCgpgciB0YWJsZV9udW1iZXJpbmcoImV4cDItLWFnZS1nZW5kZXItLXRhYmxlY2FwdGlvbiIpYApgYGB7ciBleHAyLWFnZS1nZW5kLXRhYmxlLCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQpleHAyX19hZ2VfZ2VuZGVyX3RhYmxlICU+JQogIGthYmxlKCJsYXRleCIsIGJvb2t0YWJzID0gVCkgJT4lCiAga2FibGVfc3R5bGluZyhsYXRleF9vcHRpb25zID0gImhvbGRfcG9zaXRpb24iKSAlPiUKICBjb2x1bW5fc3BlYygyLCBpdGFsaWMgPSBUUlVFKSAlPiUKICBjb2x1bW5fc3BlYyg0LCBpdGFsaWMgPSBUUlVFKSAlPiUKICByb3dfc3BlYyg1LCBib2xkID0gVFJVRSkKYGBgCgpUbyBtZWV0IG91ciBZQSByZXF1aXJlbWVudHMsIGFsbCBwYXJ0aWNpcGFudHMgd2VyZSByZXF1aXJlZCB0byBiZSBhZ2VkIGJldHdlZW4gMTgtNTkgeWVhcnMgKGFjdHVhbCBvYnRhaW5lZCByYW5nZTogYHIgbWluKGV4cDJfX3BhcnRpY2lwYW50cyRhZ2UsIG5hLnJtID0gVFJVRSlgLWByIG1heChleHAyX19wYXJ0aWNpcGFudHMkYWdlLCBuYS5ybSA9IFRSVUUpYCB5ZWFycykuIEFzIG91ciBleHBlcmltZW50IGludm9sdmVkIHR5cGluZyB0aGUgRW5nbGlzaCBsYWJlbHMgZm9yIGEgcmFuZ2Ugb2YgaW1hZ2Ugc3RpbXVsaSwgc3ViamVjdHMgd2VyZSBhbHNvIGFza2VkIHdoZXRoZXIgRW5nbGlzaCB3YXMgdGhlaXIgZmlyc3QgbGFuZ3VhZ2U7IGFsbCBidXQgb25lIHBhcnRpY2lwYW50IGluZGljYXRlZCB0aGF0IEVuZ2xpc2ggd2FzIGluZGVlZCB0aGVpciBmaXJzdCBsYW5ndWFnZSAoYHIgZXhwMl9fbl9lbmdfbGFuZ2AlKS4gCgojIyMgTWF0ZXJpYWxzCkEgcG9vbCBvZiAxMzYgbGluZSBkcmF3aW5ncyBbQHJvc3Npb24yMDA0XSAtIGRlcGljdGluZyBjb21tb24sIGV2ZXJ5ZGF5IG9iamVjdHMgLSB3ZXJlIGJyb3VnaHQgZm9yd2FyZCBmcm9tIHRoZSBwcmV2aW91cyBleHBlcmltZW50LiBUaGVzZSBpdGVtcyAoYWxvbmcgd2l0aCB0aGVpciB3cml0dGVuLXdvcmQgbGFiZWxzKSB3b3VsZCBmb3JtIHR3byBvZiB0aGUgdW5pcXVlIHN0aW11bGkgZm9ybWF0cyB0aGF0IHdvdWxkIGJlIHVzZWQgaW4gZnV0dXJlIHJlY29nbml0aW9uIGV4cGVyaW1lbnRzICh3b3JkcyBhbmQgZHJhd2luZ3MpLiBJbiB0aGlzIHN0dWR5LCB0aGUgZHJhd2luZ3MgZnJvbSBAcm9zc2lvbjIwMDQgd2VyZSBzaW1wbHkgdXNlZCBhcyBhIHJlZmVyZW5jZSBpbiB0aGUgcGhvdG9ncmFwaCBtYXRjaGluZyBwcm9jZXNzLiBDb3JyZXNwb25kaW5nIHBob3RvZ3JhcGhzIHdlcmUgb2J0YWluZWQgb25saW5lIHdpdGggdGhlIGFpbSBvZiBkZXBpY3RpbmcgdGhlIGV2ZXJ5ZGF5IG9iamVjdHMgaW4gYSBzaW1pbGFyIG1hbm5lciB0byB0aGUgZHJhd2luZ3MuIFRoZSBpbmhlcmVudCBzdWJqZWN0aXZpdHkgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZXNzIG1heSBoYXZlIGxlZCB0byBpbWFnZXMgdGhhdCB3ZXJlIG5vdCBhIHJlbGlhYmxlIOKAmG1hdGNo4oCZIHRvIHRoZSBjb25jZXB0cyB0aGV5IHdlcmUgc2VsZWN0ZWQgdG8gZGVwaWN0IChmb3IgZXhhbXBsZSwgdGhlIHBob3RvZ3JhcGggY2hvc2VuIHRvIGRlcGljdCB0aGUgY29uY2VwdCDigJxib3R0bGXigJ0gbWF5IGluYWR2ZXJ0ZW50bHkgcHJvdm9rZSB0aGUgbWFqb3JpdHkgb2YgcGFydGljaXBhbnRzIHRvIGdpdmUgdGhlIGxhYmVsICJ3aW5lIiwgdGh1cyBpbmRpY2F0aW5nIHRoYXQgdGhpcyBwYXJ0aWN1bGFyIHBob3RvZ3JhcGggZmFpbHMgdG8gYWNjdXJhdGVseSBkZXBpY3QgdGhlIGludGVuZGVkIGNvbmNlcHQpLiBUbyBhZGRyZXNzIHRoaXMgaXNzdWUsIGFuZCBlbnN1cmUgYWxsIHBob3RvZ3JhcGhzIG1vcmUgb2JqZWN0aXZlbHkgZGVwaWN0IHRoZSBzYW1lIGNvbmNlcHRzIGFzIHRoZSBsaW5lIGRyYXdpbmdzLCB0aHJlZSBkaWZmZXJlbnQgcGhvdG9ncmFwaCB2YXJpYXRpb25zIHdlcmUgZm91bmQgZm9yIGVhY2ggZXZlcnlkYXkgb2JqZWN0LCB3aXRoIHRoZSBhaW0gb2YgdGFraW5nIHRoZSBiZXN0IOKAmG1hdGNo4oCZIGZvcndhcmQuIEFuIGVtcGhhc2lzIHdhcyBwbGFjZWQgb24gdmFyaWV0eSBhY3Jvc3MgdGhlc2UgdmFyaWF0aW9ucywgd2l0aCB0aGUgYWltIG9mIG9idGFpbmluZyBhdCBsZWFzdCBvbmUgcGhvdG9ncmFwaCB0aGF0IHZlcnkgY2xvc2VseSByZXNlbWJsZWQgdGhlIGxpbmUtZHJhd24gZGVwaWN0aW9uLCBhbmQgYW5vdGhlciBvZmZlcmluZyBhIG1vcmUgbW9kZXJuIGRlcGljdGlvbi4gU29tZSBpdGVtcyB3ZXJlIHN1YnN0aXR1dGVkIGR1ZSB0byB1bmlxdWUgcmVzdHJpY3Rpb25zIHRoYXQgbWVhbnQgdGhleSBjb3VsZCBub3QgZWFzaWx5IGJlIHRyYW5zbGF0ZWQgaW50byBwaG90b2dyYXBoaWMgZm9ybWF0IChmb3IgZXhhbXBsZSwgdGhlIHNoYXBlcyAiYXJyb3ciIGFuZCAic3RhciIgY2FuIG5vdCBiZSByZXByZXNlbnRlZCBzaW1pbGFybHkgYXMgcGhvdG9ncmFwaHMpLiBQaG90byBzdGltdWxpIHdlcmUgb2J0YWluZWQgYnkgc2VhcmNoaW5nIG9wZW4tc291cmNlLCBjb3B5cmlnaHQtZnJlZSBpbWFnZSB3ZWJzaXRlcyAoZS5nLiBcaHJlZntodHRwczovL3Vuc3BsYXNoLmNvbS99e1Vuc3BsYXNofTsgXGhyZWZ7aHR0cHM6Ly93d3cucGV4ZWxzLmNvbS99e1BleGVsc30pIGZvciBwaG90b2dyYXBocyB0aGF0IGRlcGljdGVkIHRoZSBzYW1lIGV2ZXJ5ZGF5IG9iamVjdHMgYXMgdGhlIGxpbmUgZHJhd2luZ3MgKHNlZSBBcHBlbmRpeCBCIGZvciB0aGUgZnVsbCBsaXN0IG9mIGltYWdlIHJlZmVyZW5jZXMpLiAKCmBgYHtyIGV4cDItLXN0aW0tZXhhbXBsZXMtLWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICBmaWd1cmVfbnVtYmVyaW5nKG5hbWUgPSAiZXhwMi0tc3RpbS1leGFtcGxlcy0tY2FwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiRXhhbXBsZXMgb2YgbWF0Y2hpbmcgcGljdHVyZXMgYWNyb3NzIEBzbm9kZ3Jhc3MxOTgwLCBAcm9zc2lvbjIwMDQsIGFuZCAKICAgICAgICAgICAgICAgICAgICAgcGhvdG9ncmFwaHMgZnJvbSB0aGUgY3VycmVudCBzdHVkeS4gR3JleXNjYWxlIHZlcnNpb25zIG9mIHRoZSBkcmF3aW5ncyBhbmQgcGhvdG9ncmFwaHMgYXJlIAogICAgICAgICAgICAgICAgICAgICBub3QgcHJlc2VudGVkIGluIHRoaXMgZXhhbXBsZS4iKQpgYGAKJm5ic3A7CiZuYnNwOwpgYGB7ciBlY2hvPUZBTFNFLCBvdXQud2lkdGggPSAnMTAwJScsIGNhY2hlPVRSVUV9CiAgICBrbml0cjo6aW5jbHVkZV9ncmFwaGljcygiLi9yZXNvdXJjZXMvaW1hZ2VzL3N0aW0tZXhhbXBsZXMucG5nIikKYGBgCiZuYnNwOwombmJzcDsKYHIgZmlndXJlX251bWJlcmluZygiZXhwMi0tc3RpbS1leGFtcGxlcy0tY2FwdGlvbiIpYAombmJzcDsKJm5ic3A7CgpUaGUgbWF0Y2hpbmcgcHJvY2VzcyBwcm9kdWNlZCBhIHRvdGFsIG9mIDQwOCB1bmlxdWUgcGhvdG9ncmFwaHMuIEFsbCB3ZXJlIGltcG9ydGVkIGludG8gQWRvYmUgUGhvdG9zaG9wICgyMC4wLjA0IFJlbGVhc2UpLCB3aGVyZSB0aGUgYmFja2dyb3VuZCB3YXMgcmVtb3ZlZCB0byBpc29sYXRlIHRoZSBvYmplY3Qgb2YgaW50ZXJlc3QgZnJvbSBvdGhlciBwb3RlbnRpYWxseSBkaXN0cmFjdGluZyB2aXN1YWwgZGV0YWlscy4gVGhpcyB3YXMgY29tcGxldGVkIG1hbnVhbGx5IHVzaW5nIHRoZSBtYWduZXRpYyBsYXNzbyBhbmQgcG9seWdvbmFsIGxhc3NvIHRvb2xzIChlZGdlcyB3ZXJlIGVpdGhlciBmZWF0aGVyZWQgYnkgMXB4IG9yIGxlZnQgdW4tZmVhdGhlcmVkKS4gVGhlIG9yaWVudGF0aW9uIG9mIGlzb2xhdGVkIG9iamVjdHMgd2FzIGFkanVzdGVkIHRvIGVuc3VyZSB0aGV5IG1hdGNoZWQgYXMgY2xvc2VseSBhcyBwb3NzaWJsZSB3aXRoIHRoZWlyIGxpbmUtZHJhd24gY291bnRlcnBhcnQgKGUuZy4gYWxsIHBob3RvZ3JhcGggdmFyaWF0aW9ucyBvZiB0aGUgaXRlbSAnYm9vdCcgd2VyZSBhZGp1c3RlZCBzbyB0aGUgdG9lIHdhcyBmYWNpbmcgbGVmdCBhbmQgdGhlIGhlZWwgZmFjaW5nIHJpZ2h0LCBhcyBpbiB0aGUgbGluZSBkcmF3aW5nKTsgdGhpcyB3YXMgb2Z0ZW4gYWNoaWV2ZWQgYnkgZmxpcHBpbmcgb3IgbWlycm9yaW5nIHRoZSBvYmplY3QgdG8gJ2NvcnJlY3QnIHRoZSBkaXJlY3Rpb24uCgpgYGB7ciBkZWZpbmUtcGhvdG8tbWFuaXB1bGF0aW9uLWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICBmaWd1cmVfbnVtYmVyaW5nKG5hbWUgPSAicGhvdG8tbWFuaXB1bGF0aW9uLWV4YW1wbGVzIiwKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJFeGFtcGxlcyBvZiBiYWNrZ3JvdW5kIGFuZCB0ZXh0IHJlbW92YWwgaW4gcGhvdG9ncmFwaCBpdGVtcy4iKQpgYGAKCkRlc3BpdGUgaXNvbGF0aW5nIG9iamVjdHMgZnJvbSB0aGVpciBiYWNrZ3JvdW5kLCBhIHNtYWxsIG51bWJlciBvZiBwaG90b2dyYXBocyBzdGlsbCBjb250YWluZWQgaXJyZWxldmFudCBhbmQgcG90ZW50aWFsbHkgZGlzdHJhY3RpbmcgZGV0YWlscy4gRm9yIGV4YW1wbGUsIGluIG9uZSBwaG90b2dyYXBoIHZhcmlhdGlvbiBvZiB0aGUgaXRlbSAncGlhbm8nLCB0aGVyZSB3YXMgYSBzaWduIG9uIHRoZSBvYmplY3QgdGhhdCBtYXkgaGF2ZSBpbXBhY3RlZCBob3cgdGhlIGl0ZW0gd2FzIG5hbWVkIG9yIHJhdGVkLiBTdWNoIGRldGFpbHMgd2VyZSByZW1vdmVkIGFzIGJlc3QgYXMgcG9zc2libGUgdXNpbmcgdGhlIGNsb25lIHN0YW1wIGFuZCBjb250ZW50LWF3YXJlIGZpbGwgdG9vbHMuIEFueSBvYnZpb3VzIHRleHQgKGUuZy4gYnJhbmQgbmFtZXMpIGFuZCBudW1iZXJzIHdlcmUgYWxzbyByZW1vdmVkIGZyb20gcGhvdG9ncmFwaHMgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIChzZWUgYHIgZmlndXJlX251bWJlcmluZygicGhvdG8tbWFuaXB1bGF0aW9uLWV4YW1wbGVzIiwgZGlzcGxheSA9ICJjaXRlIilgKS4gVGhlIHByaW1hcnkgYWltIG9mIHRoZSBjdXJyZW50IHN0dWR5IHdhcyB0byBvYnRhaW4gcGhvdG9ncmFwaHMgdGhhdCBjb3VsZCBiZSBjbGVhcmx5IGRpc3Rpbmd1aXNoZWQgYXMgYSB1bmlxdWUgc3RpbXVsaSBmb3JtYXQgYW1vbmcgd29yZHMgYW5kIGxpbmUgZHJhd2luZ3M7IGl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgY29tYmluaW5nIHRoZXNlIGZvcm1hdHMgKGkuZS4gaW5hZHZlcnRlbnRseSBpbmNsdWRpbmcgcGhvdG9ncmFwaHMgdGhhdCBhbHNvIGNvbnRhaW4gd3JpdHRlbiB3b3JkcykgbWlnaHQgYWZmZWN0IHJlY29nbml0aW9uIHBlcmZvcm1hbmNlIGluIHdheXMgdGhhdCBhcmUgbm90IGRpcmVjdGx5IGNvbXBhcmFibGUgdG8gaXRlbXMgZGVmaW5lZCBvbmx5IGJ5IGEgc2luZ2xlIGNhdGVnb3J5LiBBbnkgdGV4dCBpbiBvdXIgcGhvdG9ncmFwaHMgd2FzIHRoZXJlZm9yZSByZW1vdmVkLCBhcGFydCBmcm9tIGEgY291cGxlIG9mIGV4Y2VwdGlvbnMgd2hlcmVieSBzdWNoIGRldGFpbHMgaGFwcGVuZWQgdG8gYmUgaW50ZWdyYWwgdG8gdGhlIGRlcGljdGlvbiBvZiB0aGUgb2JqZWN0IChlLmcuIHRoZSBudW1iZXJzIGZvdW5kIG9uIGEgcnVsZXIgb3IgY2xvY2spLgoKQWxsIHBob3RvZ3JhcGhzIHdlcmUgZXhwb3J0ZWQgZnJvbSBQaG90b3Nob3AgaW4g4oCcLnBuZ+KAnSBmb3JtYXQgaW4gYm90aCB0aGVpciBvcmlnaW5hbCBjb2xvdXIgYW5kIGluIGdyZXlzY2FsZSAoYnkgc2V0dGluZyBzYXR1cmF0aW9uIGxldmVscyB0byAwKS4gRmluYWwgZWRpdHMgd2VyZSBjb21wbGV0ZWQgaW4gQWRvYmUgTGlnaHRyb29tIChDbGFzc2ljLCA4LjIgUmVsZWFzZSk6IGV4cG9zdXJlIChicmlnaHRuZXNzKSBhZGp1c3RtZW50cyB3ZXJlIG1hZGUgb24gaW1hZ2VzIHRoYXQgYXBwZWFyZWQgdG9vIGxpZ2h0IG9yIHRvbyBkYXJrOyBoaWdobGlnaHRzIHdlcmUgZGVjcmVhc2VkIGlmIHNvbWUgYXJlYXMgd2VyZSB0b28gYnJpZ2h0IGNvbXBhcmVkIHRvIHRoZSByZXN0IG9mIHRoZSBwaG90b2dyYXBoOyBzaGFkb3dzIHdlcmUgcmFpc2VkIGlmIHNvbWUgYXJlYXMgd2VyZSB0b28gZGFyayBjb21wYXJlZCB0byB0aGUgcmVzdCBvZiB0aGUgcGhvdG9ncmFwaDsgbm9pc2UgcmVkdWN0aW9uIHdhcyBhcHBsaWVkIHRvIHNvbWUgaXRlbXMgYWZ0ZXIgaXNvbGF0aW5nIHRoZSBzdWJqZWN0IGhhZCBpbmFkdmVydGVudGx5IG1hZGUgdW53YW50ZWQgbm9pc2UvZ3JhaW4gbW9yZSB2aXNpYmxlLiBUaGUgY2hhbmdlcyBtYWRlIHRvIGVhY2ggaW1hZ2Ugd2VyZSBzeXN0ZW1hdGljYWxseSBhcHBsaWVkIHRvIGJvdGggdGhlIGNvbG91ciBhbmQgZ3JleXNjYWxlIHZlcnNpb25zIChlLmcuIGlmIG9uZSB2YXJpYXRpb24gb2YgInNob2UiIGhhZCBhbiBleHBvc3VyZSBpbmNyZWFzZSBvZiAuMDEwIGZvciB0aGUgY29sb3VyIHZlcnNpb24sIHRoZSBncmV5c2NhbGUgdmVyc2lvbiBhbHNvIHJlY2VpdmVkIGFuIGV4cG9zdXJlIGluY3JlYXNlIG9mIC4wMTApLiBTb21lIGNvbG91ci1zcGVjaWZpYyBhZGp1c3RtZW50cyB3ZXJlIG1hZGUgdG8gdGhlIGNvbG91ciBwaG90b2dyYXBocyBvbmx5LCBob3dldmVyOyBjb21tb24gcGhvdG8gYXJ0ZWZhY3RzIHN1Y2ggYXMgY2hyb21hdGljIGFiZXJyYXRpb24gKHB1cnBsZSBmcmluZ2luZykgd2VyZSBjb3JyZWN0ZWQsIGFsb25nIHdpdGggd2hpdGUgYmFsYW5jZSBub3JtYWxpc2F0aW9uLiBGaW5hbGx5LCBhbGwgcGhvdG9ncmFwaHMgd2VyZSBwbGFjZWQgb24gYSA2MDB4NjAwIHBpeGVsIHdoaXRlIGJhY2tncm91bmQsIGFuZCBtYWRlIHRvIGZpbGwgdGhpcyBmcmFtZSBhcyBtdWNoIGFzIHBvc3NpYmxlIChpLmUuIHNvbWUgaXRlbXMgd2VyZSByZXN0cmFpbmVkIGJ5IGhlaWdodCwgd2hpbHN0IG90aGVycyB3ZXJlIHJlc3RyYWluZWQgYnkgd2lkdGgpLgoKJm5ic3A7CiZuYnNwOwpgYGB7ciBwaG90by1tYW5pcHVsYXRpb24tZXhhbXBsZXMtaW1hZ2UsIGVjaG89RkFMU0UsIG91dC53aWR0aCA9ICcxMDAlJywgY2FjaGU9VFJVRX0KICAgIGtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIuL3Jlc291cmNlcy9pbWFnZXMvcGhvdG8tbWFuaXB1bGF0aW9uLWV4YW1wbGVzLnBuZyIpCiNcYmVnaW57ZmlndXJlfVtIXQojXGNlbnRlcmluZwojXGluY2x1ZGVncmFwaGljc1t3aWR0aD1cdGV4dHdpZHRoXXtwaG90by1tYW5pcHVsYXRpb24tZXhtYXBsZXN9CiNcY2FwdGlvbntgciBmaWd1cmVfbnVtYmVyaW5nKCJwaG90by1tYW5pcHVsYXRpb24tZXhhbXBsZXMiKWB9XGxhYmVse3Bob3RvLW1hbmlwdWxhdGlvbi1leG1hcGxlc30KI1xlbmR7ZmlndXJlfQpgYGAKJm5ic3A7CiZuYnNwOwpgciBmaWd1cmVfbnVtYmVyaW5nKCJwaG90by1tYW5pcHVsYXRpb24tZXhhbXBsZXMiKWAKJm5ic3A7CiZuYnNwOwoKIyMjIERlc2lnbgpUaGlzIHdhcyBhIGRlc2NyaXB0aXZlIHN0dWR5OyBhIG1peCBvZiBxdWFsaXRhdGl2ZSBhbmQgcXVhbnRpdGF0aXZlIGRhdGEgd2VyZSBnYXRoZXJlZC4gQWNyb3NzIHRocmVlIGJsb2NrcywgYWxsIHBhcnRpY2lwYW50cyBwcm92aWRlZCBmaXZlIHR5cGVzIG9mIHJlc3BvbnNlIHRvd2FyZCBwaG90b2dyYXBoIHN0aW11bGk6IGkpIE5hbWluZzsgaWkpIEZhbWlsaWFyaXR5OyBpaWkpIFZpc3VhbCBDb21wbGV4aXR5LCBpdikgQ29sb3VyIERpYWdub3N0aWNpdHk7IGFuZCB2KSBNZW50YWwgSW1hZ2VyeSBBZ3JlZW1lbnQuIEV4Y2x1ZGluZyB0aGUgTmFtaW5nIHRhc2sgKGNvbnNpc3Rpbmcgb2YgYSB0eXBlZCBzaW5nbGUtd29yZCBhbnN3ZXIpLCBhbGwgcmVzcG9uc2VzIHdlcmUgcHJvdmlkZWQgb24gYSA1LXBvaW50IG9yZGluYWwgc2NhbGUuIFdpdGhpbiBwYXJ0aWNpcGFudHMsIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNwb25zZSB0eXBlIHByb3ZpZGVkIGZvciBhbnkgb25lIGl0ZW0gd2FzIHR3bzsgTmFtaW5nIGFuZCBGYW1pbGlhcml0eSByZXNwb25zZXMgd2VyZSBwYWlyZWQgaW4gb25lIGJsb2NrLCBWaXN1YWwgQ29tcGxleGl0eSBhbmQgQ29sb3VyIERpYWdub3N0aWNpdHkgcmVzcG9uc2VzIHdlcmUgcGFpcmVkIGluIGFub3RoZXIsIGFuZCBNZW50YWwgSW1hZ2VyeSBBZ3JlZW1lbnQgcmVzcG9uc2VzIHdlcmUgYWx3YXlzIHByZXNlbnRlZCBpbiBhIHNlcGFyYXRlIGJsb2NrLiBUaGUgb3JkZXIgb2YgdGhlc2UgdGhyZWUgYmxvY2tzIHdhcyBjb3VudGVyYmFsYW5jZWQgYWNyb3NzIHBhcnRpY2lwYW50cy4gVG93YXJkIGVhY2ggaW5kaXZpZHVhbCBwaG90b2dyYXBoLCBwYXJ0aWNpcGFudHMgbWFkZSBvbmx5IG9uZSBvciB0d28gdHlwZXMgb2YgcmVzcG9uc2UgYmVmb3JlIG1vdmluZyBvbiB0byB0aGUgbmV4dCBpdGVtLCBhbmQgdGhlIHNhbWUgaXRlbXMgd2VyZSBub3QgcmVwZWF0ZWQgdG8gcGFydGljaXBhbnRzLiBGb3IgZWFjaCBwaG90b2dyYXBoLCB0aGUgZml2ZSB0eXBlcyBvZiByZXF1aXJlZCBkYXRhIHdlcmUgb2J0YWluZWQgYnkgY291bnRlcmJhbGFuY2luZyBiZXR3ZWVuIHBhcnRpY2lwYW50cyAoZS5nLiBmb3IgdGhlIGZpcnN0IHZhcmlhdGlvbiBvZiB0aGUgImNhdCIgcGhvdG9ncmFwaCwgdGhlIE5hbWluZyBhbmQgRmFtaWxpYXJpdHkgZGF0YSB3YXMgb2J0YWluZWQgZnJvbSBvbmUgcGFydGljaXBhbnQsIHRoZSBWaXN1YWwgQ29tcGxleGl0eSBhbmQgQ29sb3VyIERpYWdub3N0aWNpdHkgZGF0YSB3YXMgb2J0YWluZWQgZnJvbSBhbm90aGVyLCBhbmQgdGhlIE1lbnRhbCBJbWFnZXJ5IEFncmVlbWVudCBkYXRhIHdhcyBvYnRhaW5lZCBmcm9tIGFub3RoZXIpLiAKCiMjIyBQcm9jZWR1cmUKRGF0YSBjb2xsZWN0aW9uIHdhcyBjb25kdWN0ZWQgdmlhIHR3byBvbmxpbmUgcGxhdGZvcm1zOyBpKSBcaHJlZntodHRwczovL3d3dy5xdWFsdHJpY3MuY29tL3VrL317UXVhbHRyaWNzfSAtIGEgc3VydmV5IHBsYXRmb3JtIHRoYXQgYWxsb3dlZCBmb3Igc3RyYWlnaHRmb3J3YXJkIGNvbGxlY3Rpb24gb2YgY29uc2VudCwgZGVtb2dyYXBoaWNzLCBhbmQgY29tcHV0ZXIgY29tcGF0aWJpbGl0eSBkYXRhLCBhbmQgaWkpIFxocmVme2h0dHBzOi8vcGF2bG92aWEub3JnL317UGF2bG92aWF9IC0gYW4gb3Blbi1zb3VyY2UgZXhwZXJpbWVudCBob3N0aW5nIHBsYXRmb3JtIGZvciBzdHVkaWVzIHByb2dyYW1tZWQgaW4gSmF2YXNjcmlwdCBbQHBlaXJjZTIwMTldLgoKSW4gdGhlIE5hbWluZyBhbmQgRmFtaWxpYXJpdHkgYmxvY2ssIHBhcnRpY2lwYW50cyB3ZXJlIGZpcnN0IGFza2VkICJXaGF0IGlzIHRoZSBuYW1lIG9mIHRoZSBpdGVtIGRlcGljdGVkPyIuIFN1YmplY3RzIHdlcmUgaW5zdHJ1Y3RlZCB0byBuYW1lIGVhY2ggcGhvdG9ncmFwaCBhcyBicmllZmx5IGFuZCB1bmFtYmlndW91c2x5IGFzIHBvc3NpYmxlLCB3aXRoIG9uZSBuYW1lIG9ubHksIGFuZCByZXNwb25kIGJ5IHR5cGluZyB0aGVpciBhbnN3ZXIgaW50byB0aGUgcmVzcG9uc2UgYm94LiBJZiB0aGV5IGRpZCBub3Qga25vdyB0aGUgbmFtZSBvZiBhbiBpdGVtLCBvciBoYWQgYSB0aXAtb2YtdGhlLXRvbmd1ZSBleHBlcmllbmNlLCBwYXJ0aWNpcGFudHMgd2VyZSBpbnN0cnVjdGVkIHRvIHR5cGUgIm5vIiBmb3IgdGhlaXIgYW5zd2VyICh0aGUgdGVybSAiZG9uJ3Qga25vdyIgd2FzIGF2b2lkZWQgc28gYXMgbm90IHRvIGVuY291cmFnZSBzdWJqZWN0cyB0byBkZXZpYXRlIGZyb20gc2luZ2xlLXdvcmQgcmVzcG9uc2VzLCBhcyBpbnN0cnVjdGVkKS5Gb2xsb3dpbmcgdGhlIG5hbWluZyBqdWRnZW1lbnQsIHdpdGggdGhlIHNhbWUgcGhvdG9ncmFwaCBzdGlsbCBwcmVzZW50IG9uLXNjcmVlbiwgcGFydGljaXBhbnRzIHdlcmUgbmV4dCBhc2tlZCAiSG93IGZhbWlsaWFyIGlzIHRoZSBpdGVtIGRlcGljdGVkPyIuIFN1YmplY3RzIHdlcmUgaW5zdHJ1Y3RlZCB0byBqdWRnZSBlYWNoIHBob3RvIGFjY29yZGluZyB0byBob3cgdXN1YWwgb3IgdW51c3VhbCB0aGUgaXRlbSB3YXMgaW4gdGhlaXIgcmVhbG0gb2YgZXhwZXJpZW5jZTsgc3BlY2lmaWNhbGx5LCBmYW1pbGlhcml0eSB3YXMgZGVmaW5lZCBhcyAidGhlIGRlZ3JlZSB0byB3aGljaCB5b3UgY29tZSBpbiBjb250YWN0IHdpdGgsIG9yIHRoaW5rIGFib3V0LCB0aGUgY29uY2VwdCIsIGFuZCBlbmNvdXJhZ2VkIHBhcnRpY2lwYW50cyB0byByYXRlIHRoZSBjb25jZXB0IGl0c2VsZiByYXRoZXIgdGhhbiB0aGUgcGFydGljdWxhciB3YXkgaXQgd2FzIGN1cnJlbnRseSBzaG93bi4gUGFydGljaXBhbnRzIHNlbGVjdGVkIG9uZSB2YWx1ZSBmcm9tIHRoZSA1LXBvaW50IHNjYWxlLCByYW5naW5nIGZyb20gdmVyeSB1bmZhbWlsaWFyICgxKSB0byB2ZXJ5IGZhbWlsaWFyICg1KSwgYW5kIHdlcmUgZW5jb3VyYWdlZCB0byB1c2UgdGhlIGZ1bGwgcmFuZ2Ugb2YgdGhlIHNjYWxlIHRocm91Z2hvdXQgdGhlIHNldCBvZiBwaG90b2dyYXBocy4gCgpJbiB0aGUgVmlzdWFsIENvbXBsZXhpdHkgYW5kIENvbG91ciBEaWFnbm9zdGljaXR5IGJsb2NrLCBwYXJ0aWNpcGFudHMgd2VyZSBmaXJzdCBpbnN0cnVjdGVkIHRvIHJlc3BvbmQgdG8gdGhlIHF1ZXN0aW9uICJIb3cgdmlzdWFsbHkgY29tcGxleCBpcyB0aGlzIHBpY3R1cmU/IiB1c2luZyBhIDUtcG9pbnQgc2NhbGUgdGhhdCByYW5nZWQgZnJvbSAidmVyeSBzaW1wbGUiICgxKSB0byAidmVyeSBjb21wbGV4IiAoNSkuIENvbXBsZXhpdHkgd2FzIGRlZmluZWQgdG8gc3ViamVjdHMgYXMgInRoZSBhbW91bnQgb2YgZGV0YWlsIGluIHRoZSBwaWN0dXJlIjsgaW4gY29udHJhc3QgdG8gdGhlIGZhbWlsaWFyaXR5IHJhdGluZ3MsIHBhcnRpY2lwYW50cyB3ZXJlIGVuY291cmFnZWQgaGVyZSB0byByYXRlIHRoZSBjb21wbGV4aXR5IG9mIHRoZSBwaWN0dXJlIGl0c2VsZiwgcmF0aGVyIHRoYW4gdGhlIHJlYWwtbGlmZSBpdGVtLiBJZiB0aGUgcGhvdG9ncmFwaCBzaG93biB3YXMgZ3JleXNjYWxlLCBzdWJqZWN0cyB3b3VsZCBzaW1wbHkgbW92ZSBvbiB0byB0aGUgbmV4dCBpdGVtLiBJZiB0aGUgaXRlbSBzaG93biB3YXMgaW4gY29sb3VyLCBob3dldmVyLCBwYXJ0aWNpcGFudHMgd2VyZSBhbHNvIHJlcXVpcmVkIHRvIG1ha2UgYSBjb2xvdXIgZGlhZ25vc3RpY2l0eSBqdWRnZW1lbnQuIFRoaXMgY29uY2VwdCB3YXMgZGVmaW5lZCBhcyAiaG93IHR5cGljYWwgLyBub3JtYWwgdGhlIGNvbG91ciBvZiB0aGUgaXRlbSBpcyIsIGluc3RydWN0aW5nIHN1YmplY3RzIHRvIHJhdGUgb24gYSA1LXBvaW50IHNjYWxlIHJhbmdpbmcgZnJvbSAiTm90IGF0IGFsbCBkaWFnbm9zdGljIChpLmUuIHRoaXMgaXRlbSBjb3VsZCBiZSBpbiBhbnkgb3RoZXIgY29sb3VyIGVxdWFsbHkgd2VsbCkiICgxKSB0byAiSGlnaGx5IGRpYWdub3N0aWMgKGkuZS4gdGhpcyBpdGVtIGFwcGVhcnMgb25seSBpbiB0aGlzIGNvbG91ciBpbiByZWFsIGxpZmUpLiBQYXJ0aWNpcGFudHMgd2VyZSBpbnN0cnVjdGVkIHRvIHV0aWxpc2UgdGhlIGZ1bGwgcmFuZ2Ugb2Ygb3B0aW9ucyBvbiB0aGUgc2NhbGUgd2hlbiBtYWtpbmcgdmlzdWFsIGNvbXBsZXhpdHkgYW5kIGNvbG91ciBkaWFnbm9zdGljaXR5IGp1ZGdlbWVudHMuIEFmdGVyIG1ha2luZyB0aGVzZSByYXRpbmdzLCBhIGZpeGF0aW9uIGNyb3NzIHdhcyBwcmVzZW50ZWQgZHVyaW5nIGEgMXMgaW50ZXJzdGltdWx1cyBpbnRlcnZhbC4gCiAKRHVlIHRvIHRoZSBzbGlnaHQgY2hhbmdlIGluIHByb2NlZHVyZSBhbmQgaW5jcmVhc2VkIHRhc2sgY29tcGxleGl0eSwgTWVudGFsIEltYWdlcnkgQWdyZWVtZW50IHJhdGluZ3Mgd2VyZSBhbHdheXMgYWNxdWlyZWQgaW4gYW4gaW5kaXZpZHVhbCBibG9jayAoaS5lLiBub3QgYWxvbmdzaWRlIGFueSBvdGhlciByZXNwb25zZSB0eXBlcykuIEZpcnN0LCBwYXJ0aWNpcGFudHMgd2VyZSBwcmVzZW50ZWQgd2l0aCBhIHdyaXR0ZW4gbGFiZWwgZm9yIDNzIChlLmcuICJjYXQiKSBhbmQgdG9sZCB0byBmb2N1cyB0aGVpciBhdHRlbnRpb24gb24gdGhlIHdvcmQuIE9uY2UgdGhlIHdyaXR0ZW4gd29yZCBkaXNhcHBlYXJlZCwgYSBiZWVwIHRvbmUgd2FzIHBsYXllZCBhbG9uZ3NpZGUgdGhlIGluc3RydWN0aW9uICJjbG9zZSB5b3VyIGV5ZXMgYW5kIGltYWdpbmUgdGhpcyBpdGVtIiAoc3ViamVjdHMgd2VyZSBlbmNvdXJhZ2VkIHRvIGNsb3NlIHRoZWlyIGV5ZXMgYW5kIGJlZ2luIGltYWdpbmluZyB0aGUgaXRlbSBhcyBzb29uIGFzIHRoZXkgaGVhcmQgdGhlIHRvbmUsIGJ1dCB0aGUgd3JpdHRlbiBpbnN0cnVjdGlvbiB3ZXJlIGluY2x1ZGVkIGFzIGEgZnVydGhlciBwcm9tcHQpLiBBZnRlciAzcyBhIHNlY29uZCBiZWVwIHRvbmUgc291bmRlZCB0byBhbGVydCBzdWJqZWN0cyB0byBvcGVuIHRoZWlyIGV5ZXMsIHdoZXJlIHRoZXkgd2VyZSBwcmVzZW50ZWQgd2l0aCBhIHBob3RvZ3JhcGggb2YgdGhlIGl0ZW0gdGhleSBoYWQgYmVlbiBpbnN0cnVjdGVkIHRvIGltYWdpbmUuIE9uIGEgNS1wb2ludCBzY2FsZSwgcGFydGljaXBhbnRzIHdlcmUgYXNrZWQgdG8gInJhdGUgdGhlIGFncmVlbWVudCBiZXR3ZWVuIHlvdXIgbWVudGFsIGltYWdlIGFuZCB0aGUgcGljdHVyZSIsIGZyb20gImxvdyBhZ3JlZW1lbnQiICgxKSB0byAiaGlnaCBhZ3JlZW1lbnQiICg1KS4gVGhlIGRlZ3JlZSBvZiBhZ3JlZW1lbnQgd2FzIGRlZmluZWQgYXMgImhvdyBzaW1pbGFyIHlvdXIgbWVudGFsIGltYWdlIG9mIHRoZSBpdGVtIGlzIHRvIHRoZSBwaWN0dXJlIHNob3duIi4gQSBmaXhhdGlvbiBjcm9zcyB3YXMgZGlzcGxheWVkIGZvciAxcyBiZWZvcmUgdGhlIG5leHQgd29yZCBpdGVtIHdhcyBzaG93bi4KCkFsbCByZXNwb25zZXMgd2VyZSBzZWxmLXBhY2VkOyB0aGUgdGltaW5nIHdhcyBvbmx5IGNvbnRyb2xsZWQgZHVyaW5nIHRoZSBzdHVkeS9pbWFnaW5lIHNlY3Rpb24gb2YgdGhlIE1lbnRhbCBJbWFnZXJ5IEFncmVlbWVudCBibG9jay4KCmBgYHtyIGRlZmluZS1tZW4taW1hLXByb2NlZHVyZS1jYXB0aW9uLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgZmlndXJlX251bWJlcmluZyhuYW1lID0gImV4cDJfX21lbl9pbWFfcHJvY2VkdXJlIiwKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJEYXRhIGNvbGxlY3Rpb24gcHJvY2VkdXJlIGZvciBNZW50YWwgSW1hZ2VyeSBBZ3JlZW1lbnQgcmVzcG9uc2VzLiIpCmBgYAoKJm5ic3A7CiZuYnNwOwpgYGB7ciBtZW4taW1hLXByb2NlZHVyZS1pbWFnZSwgZWNobz1GQUxTRSwgb3V0LndpZHRoID0gJzEwMCUnLCBjYWNoZT1UUlVFfQogICAga25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoIi4vcmVzb3VyY2VzL2ltYWdlcy9wcm9jZWR1cmUucG5nIikKYGBgCiZuYnNwOwombmJzcDsKYHIgZmlndXJlX251bWJlcmluZygiZXhwMl9fbWVuX2ltYV9wcm9jZWR1cmUiKWAKJm5ic3A7CiZuYnNwOwoKIyMjIERhdGEgcHJvY2Vzc2luZwpUaGUgbmFtaW5nIHJlc3BvbnNlcyBmb3IgZWFjaCBwaG90b2dyYXBoIGl0ZW0gd2VyZSBtYW51YWxseSBhc3Nlc3NlZCBmb3Igc3BlbGxpbmcgYW5kIHR5cGluZyBlcnJvcnMuIEF1dG9tYXRpYyBzcGVsbCBjaGVja2luZyBzb2Z0d2FyZSB3YXMgYXZvaWRlZCBpbiBhbiBlZmZvcnQgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBpbnRyb2R1Y2luZyB1bmlxdWUgbmFtZXMgdGhhdCB3ZXJlIG5vdCBhY3R1YWxseSBnaXZlbiBieSBwYXJ0aWNpcGFudHMuIFRoZSB2YXN0IG1ham9yaXR5IG9mIGVycm9ycyB3ZXJlIHVuYW1iaWd1b3VzIGFuZCBlYXN5IHRvIGNvcnJlY3QgKGUuZy4gImFua2VyIiA9ICJhbmNob3IiLCAicGVndWluIiA9ICJwZW5ndWluIiwgInNzbm93bWFuIiA9ICJzbm93bWFuIiksIG9yIGNvbnNpc3RlZCBvZiB0cmFuc2Zvcm1pbmcgcGx1cmFsIHdvcmRzIHRvIHNpbmd1bGFyIChvciB2aWNlIHZlcnNhLCBkZXBlbmRpbmcgb24gdGhlIGZvcm0gb2YgdGhlIGludGVuZGVkIGxhYmVsIC0gZS5nLiAic29jayIgdG8gInNvY2tzIikuIFNvbWUgcmVzcG9uc2VzIHdlcmUgYSBsaXR0bGUgbW9yZSBhbWJpZ3VvdXMsIGFuZCBuZWNlc3NpdGF0ZWQgY29tcGFyaXNvbiB0byB0aGUgcGhvdG9ncmFwaHMgdGhleSB3ZXJlIGluIHJlc3BvbnNlIHRvIGZvciBhZGRpdGlvbmFsIGNsYXJpdHkgKGUuZy4gYSBwaG90b2dyYXBoIGRlcGljdGluZyBhIHBsdWcgdGhhdCB3b3VsZCBmaXQgaW50byBOb3J0aCBBbWVyaWNhbiBlbGVjdHJpY2FsIHNvY2tldHMgd2FzIGxhYmVsbGVkIGFzICJ1c3BsdWciIC0gZ2l2ZW4gdGhlIG5hdHVyZSBvZiBvdXIgVUstYmFzZWQgc2FtcGxlLCBpdCdzIGxpa2VseSB0aGUgc3ViamVjdCB3YXMgcmVzcG9uZGluZzogIlUuUy4gKGkuZS4gVW5pdGVkIFN0YXRlcykgcGx1ZyIuIAoKVGhlcmUgd2VyZSBpbnN0YW5jZXMgd2hlcmUgc3ViamVjdHMgcHJvdmlkZWQgYSBzZW5zaWJsZSBhbmQgY29ycmVjdGx5IHNwZWxsZWQgRW5nbGlzaCB3b3JkLCBidXQgdGhhdCB3ZXJlIGNsZWFybHkgdHlwb3Mgd2hlbiBleGFtaW5lZCBhZ2FpbnN0IHRoZSBwaG90b2dyYXBoIHRoZXkgd2VyZSBpbiByZXNwb25zZSB0byAoZS5nLiAiZG9jayIgZm9yIGEgcGhvdG9ncmFwaCBkZXBpY3RpbmcgYSBkdWNrLCAiZnJvY2siIGZvciBhIGZyb2csIGFuZCAiYmVlciIgZm9yIGEgImJlYXIiLCBldGMpLiBUaGUgbW9zdCBhbWJpZ3VvdXMgc3BlbGxpbmcgZXJyb3IgdG8gY29ycmVjdCB3YXMgImJpdHRsZSIsIHdoaWNoIHdhcyBwcm92aWRlZCBieSBtb3JlIHRoYW4gb25lIHBhcnRpY2lwYW50IGFuZCB0byBtb3JlIHRoYW4gb25lIGl0ZW07IHNlcGFyYXRlIGluc3BlY3Rpb25zIG9mIHRoZSBwaG90b2dyYXBocyBwYXJ0aWNpcGFudHMgd2VyZSByZXNwb25kaW5nIHRvIG1hZGUgdGhpcyBlYXN5IHRvIGNvcnJlY3QgdGhvdWdoLCB3aXRoIG9uZSBwYXJ0aWNpcGFudCBjbGVhcmx5IG1lYW5pbmcgdG8gcmVzcG9uZCAiYm90dGxlIiwgd2hpbHN0IHRoZSBvdGhlciBtZWFudCB0byByZXNwb25kICJiZWV0bGUiLiBUaG91Z2ggcGFydGljaXBhbnRzIHdlcmUgaW5zdHJ1Y3RlZCB0byBvbmx5IGdpdmUgYSBzaW5nbGUgbGFiZWwgZm9yIGVhY2ggaXRlbSwgc29tZSBtdWx0aXBsZSB3b3JkIHJlc3BvbnNlcyB3ZXJlIGZvdW5kICh3aXRob3V0IHNwYWNlcykgZHVyaW5nIHRoZSBzcGVsbCBjaGVja2luZyBwcm9jZXNzLiBPbiBzdWNoIG9jY2FzaW9ucywgYSBqdWRnZW1lbnQgd2FzIG1hZGUgcmVnYXJkaW5nIHdoZXRoZXIgbXVsdGlwbGUgd29yZHMgd2VyZSByZXRhaW5lZCwgb3Igd2hldGhlciB0aGUgcmVzcG9uc2UgY291bGQgYmUgc2hvcnRlbmVkIGludG8gYSBzaW5nbGUgd29yZC4gQSBnZW5lcmFsIHJ1bGUgd2FzIGFwcGxpZWQgd2hlcmVieSBpZiB0aGUgb3RoZXIgd29yZHMgcHJvdmlkZWQgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgdGhleSB3ZXJlIHJldGFpbmVkIChlLmcuIm1hbGVkZWFyIiAtIHByZXN1bWFibHkgIm1hbGUgZGVlciIgLSB3YXMga2VwdCBhcyBhIHR3by13b3JkIGFuc3dlcikuIE11bHRpcGxlIHdvcmQgcmVzcG9uc2VzIHdlcmUgZ2VuZXJhbGx5IHNob3J0ZW5lZCBpbnRvIGEgc2luZ2xlIHdvcmQgd2hlbiB0aGUgaW50ZW5kZWQgbGFiZWwgZm9yIHRoZSBpdGVtIHdhcyBjbGVhcmx5IHByZXNlbnQsIGFuZCBubyBpbmZvcm1hdGlvbiB3YXMgbG9zdCBpbiB0aGUgcHJvY2VzcyAoZS5nLiAiaGFpcmNvbWIiIHdhcyBzaG9ydGVuZWQgdG8gdGhlIGludGVuZGVkIGFuc3dlciAiY29tYiIpLiBJdCBpcyBub3RlZCB0aGF0IHRoZXJlIHdhcyBzb21lIGluaGVyZW50IHN1YmplY3Rpdml0eSBpbiB0aGlzIHByb2Nlc3MsIHRob3VnaCBhcyBzdWNoIGl0ZW1zIHdlcmUgbm90IGNvbW1vbiBhbW9uZyBzdHJhaWdodGZvcndhcmQgcmVzcG9uc2VzLCB0aGVpciBvdmVyYWxsIGVmZmVjdHMgYXJlIGVzdGltYXRlZCB0byBiZSBuZWdsaWdpYmxlLgoKRmluYWxseSwgdGhlcmUgd2VyZSBzb21lIHJlc3BvbnNlcyB0aGF0IHdlcmUgY2hhbmdlZCB0byAibm8iIGFzIHRoZXkgd2VyZSBjbGVhcmx5IGludGVuZGVkIHRvIHNpZ25pZnkgdGhhdCB0aGUgcmVzcG9uZGVyIGRpZCBub3Qga25vdyB0aGUgbmFtZSBvZiB0aGUgaXRlbSBzaG93bjsgdGhlIGV4cGVyaW1lbnQgaW5zdHJ1Y3RlZCBwYXJ0aWNpcGFudHMgdG8gdHlwZSAibm8iIGluIHRoZXNlIGluc3RhbmNlcywgdGhvdWdoIHRoZSBsYWJlbHMgIm5vbmUiIGFuZCAiaWRrIiAoY29tbW9uIGFiYnJldmlhdGlvbiBmb3IgIkkgZG9uJ3Qga25vdykgd2VyZSBwcm92aWRlZCBpbnN0ZWFkLiBUaGVyZSB3YXMgYWxzbyBhIHNpbmdsZSByZXNwb25zZSB0aGF0IHdhcyBtYW51YWxseSBjaGFuZ2VkIHRvICJubyIsIGFzIHRoZSBwcm92aWRlZCBsYWJlbCB3YXMgYSBzaW5nbGUgbGV0dGVyIGFuZCB0aHVzIGVudGlyZWx5IHVuY2xlYXIgd2hhdCB0aGUgaW50ZW5kZWQgYW5zd2VyIHNob3VsZCBiZSAoc2VlIEFwcGVuZGl4IEEgZm9yIGZ1bGwgbGlzdCBvZiBtYW5pcHVsYXRpb25zIHRvIG5hbWluZyByZXNwb25zZXMpLiBUaGlzIHByb2Nlc3MgeWllbGRlZCBkYXRhIHRoYXQgY291bGQgYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggcGhvdG9ncmFwaCB2YXJpYXRpb24gYmVzdCBtYXRjaGVkIHRoZSBpbnRlbmRlZCBjb25jZXB0cyAoZS5nLiAxMDAlIG9mIHBhcnRpY2lwYW50cyBsYWJlbGxlZCB0aGUgb2JqZWN0IOKAnGJvdHRsZeKAnSwgaW5kaWNhdGluZyBhIHBlcmZlY3QgbWF0Y2gpLCBhbmQgd2hpY2ggZGlkIG5vdCAoZS5nLiBvbmx5IDUwJSBvZiBwYXJ0aWNpcGFudHMgbGFiZWxsZWQgdGhlIGl0ZW0g4oCcYm90dGxl4oCdLCB3aGlsc3QgdGhlIG90aGVyIDUwJSBnYXZlIHRoZSBsYWJlbCDigJx3aW5l4oCdLCBpbmRpY2F0aW5nIGEgcG9vciBtYXRjaCkuIFBob3RvZ3JhcGhzIHNob3dpbmcgcG9vciBhZ3JlZW1lbnQgYWNyb3NzIHBhcnRpY2lwYW50LWdlbmVyYXRlZCBsYWJlbHMsIG9yIHRob3NlIHdoZXJlIHRoZSBtYWpvcml0eSBvZiBsYWJlbHMgZGlmZmVyZWQgZnJvbSB0aGUgaW50ZW5kZWQgY29uY2VwdCwgY291bGQgYmUgcmVwbGFjZWQgd2l0aCB0aGUgdmFyaWF0aW9uIGRlbW9uc3RyYXRpbmcgdGhlIG1vc3QgYWNjdXJhdGUgZGVwaWN0aW9uLiAKCiMjIyBBbmFseXNpcyBwcmVwZXJhdGlvbgpBIG51bWJlciBvZiB2YXJpYWJsZXMgd2VyZSBjYWxjdWxhdGVkIHByaW9yIHRvIGFuYWx5c2lzLiBGb3IgZmFtaWxpYXJpdHksIHZpc3VhbCBjb21wbGV4aXR5LCBjb2xvdXIgZGlhZ25vc3RpY2l0eSwgYW5kIG1lbnRhbCBpbWFnZXJ5IGFncmVlbWVudCwgbWVhbiByYXRpbmdzIHdlcmUgY2FsY3VsYXRlZCBmb3IgZWFjaCAoc2VlIEFwcGVuZGl4IEIpLiBNZWFuIHJlYWN0aW9uIHRpbWVzIChSVHMpIHdlcmUgYWxzbyBjYWxjdWxhdGVkIGZvciBlYWNoIHBob3RvZ3JhcGggLyByZXNwb25zZSB2YXJpYWJsZSwgaW5jbHVkaW5nIG5hbWluZyByZXNwb25zZXMuIEZvciBuYW1pbmcgcmVzcG9uc2VzLCBhY2N1cmFjeSB3YXMgZGVmaW5lZCBhcyB0aGUgcHJvcG9ydGlvbiBvZiBzdWJqZWN0cyByZXBvcnRpbmcgdGhlIGNvcnJlY3QvaW50ZW5kZWQgbGFiZWwgZm9yIGFueSBnaXZlbiBpdGVtIChlLmcuIDgwJSBvZiBzdWJqZWN0cyBjb3JyZWN0bHkgbGFiZWxsZWQgYSBwaG90b2dyYXBoIG9mIHRoZSBtb29uIGFzICJtb29uIikuIFBlcmNlbnRhZ2UgYWdyZWVtZW50IHdhcyBhbHNvIGNhbGN1bGF0ZWQgKGkuZS4gdGhlIHByb3BvcnRpb24gb2Ygc3ViamVjdHMgcHJvdmlkaW5nIHRoZSBtb3N0IGZyZXF1ZW50IG5hbWUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBtYXRjaGVkIHRoZSBjb3JyZWN0L2ludGVuZGVkIGxhYmVsKSBpbiBvcmRlciB0byBjb21wdXRlICpIKiB2YWx1ZXMgZm9yIGVhY2ggaXRlbS4gVGhlICpIKiBzdGF0aXN0aWMgYWxzbyByZWZsZWN0cyBuYW1pbmcgYWdyZWVtZW50LCBidXQgaXQgdGFrZXMgaW50byBhY2NvdW50IHRoZSB0b3RhbCBudW1iZXIgb2YgdW5pcXVlIGxhYmVscyBnaXZlbiBmb3IgYW4gaXRlbS4gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgY29tcGFyaW5nIHNpbWlsYXIgaXRlbXMsIGFzIGl0IGNhcHR1cmVzIGluZm9ybWF0aW9uIG5vdCBwcm92aWRlZCBieSBzaW1wbGUgYWdyZWVtZW50IHByb3BvcnRpb25zLiBGb3IgaW5zdGFuY2UsIGlmIHRoZSBmaXJzdCB2YXJpYXRpb24gb2YgdGhlIHBob3RvIG1vb24gKCdtb29uLTEnKSBkZW1vbnN0cmF0ZWQgOTAlIG5hbWluZyBhZ3JlZW1lbnQgYW1vbmcgc3ViamVjdHMsIGFuZCB0aGUgc2Vjb25kIHZhcmlhdGlvbiAoJ21vb24tMicpIGFsc28gZGVtb25zdHJhdGVkIDkwJSBuYW1pbmcgYWdyZWVtZW50LCBpdCB3b3VsZCBhcHBlYXIgYXMgaWYgYm90aCB2ZXJzaW9ucyBvZmZlciB0aGUgc2FtZSBsZXZlbCBvZiBhZ3JlZW1lbnQgYW1vbmcgcGFydGljaXBhbnRzLiBIb3dldmVyLCAnbW9vbi0xJyBtYXkgaGF2ZSByZWNlaXZlZCBhIHRvdGFsIG9mIDIgdW5pcXVlIG5hbWVzIChlLmcuIG1vb24sIHBsYW5ldCksIHdoaWxlICdtb29uLTInIHJlY2VpdmVkIGEgdG90YWwgb2YgNCB1bmlxdWUgbmFtZXMgKGUuZy4gbW9vbiwgcGxhbmV0LCBlYXJ0aCwgY29tZXQpLiAqSCogdmFsdWVzIHV0aWxpc2UgdGhpcyB1c2VmdWwgaW5mb3JtYXRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoIGl0ZW0gc2hvd3MgdGhlIGJlc3QgbmFtaW5nIGFncmVlbWVudCAoaW4gb3RoZXIgd29yZHMsIHRoZSBpdGVtIHdpdGggdGhlIGxlYXN0IG51bWJlciBvZiB1bmlxdWUgbmFtZXMpLiBUaGUgb3JpZ2luYWwgZm9ybXVsYSBieSBAc25vZGdyYXNzMTk4MCB3YXMgdXNlZCB0byBjYWxjdWxhdGUgKkgqIHZhbHVlczoKCmBgYHtyIGVjaG89RkFMU0UsIG91dC53aWR0aCA9ICc1MCUnLCBmaWcucG9zPSJoIn0KICAgIGtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCIuL3Jlc291cmNlcy9pbWFnZXMvaF9jYWxjdWxhdGlvbi5wbmciKQpgYGAKCkEgKkgqIHZhbHVlIG9mIDAgaW5kaWNhdGVzIHBlcmZlY3QgbmFtaW5nIGFncmVlbWVudCAoYWxsIHN1YmplY3RzIHJlc3BvbmRlZCB3aXRoIHRoZSBzYW1lIGxhYmVsIGZvciB0aGF0IGl0ZW0pLiBJdGVtcyBzaG93aW5nIGEgKkgqIHZhbHVlIG9mIDEgc2lnbmlmeSB0d28gdW5pcXVlIG5hbWVzIHdlcmUgcHJvdmlkZWQsIHdpdGggaWRlbnRpY2FsIHByb3BvcnRpb25zIChlLmcuIDEwIHN1YmplY3RzIHJlc3BvbmRlZCAibW9vbiIgYW5kIDEwIHN1YmplY3RzIHJlc3BvbmRlZCAicGxhbmV0IikuIEFzIHRoZSAqSCogdmFsdWUgaW5jcmVhc2VzLCBvdmVyYWxsIG5hbWluZyBhZ3JlZW1lbnQgZGVjcmVhc2VzLgoKYGBge3IgbmFtaW5nLWRhdGEsIGluY2x1ZGU9RkFMU0UsIGNhY2hlPVRSVUV9CiMjICBDcmVhdGUgbm9ybXMgdGFibGU6CiAgICBleHAyX19jb2x2c2dyZXlub3JtcyA8LSB0cmliYmxlKCB+IlZhcmlhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH4ibGluZXMiLCB+ImdyZXlfc2hhZGVkIiwgfiJjb2xfc2hhZGVkIiwgfiJncmV5X3Bob3RvIiwgfiJjb2xfcGhvdG8iLAogICAgICAgICJOYW1pbmcgYWNjdXJhY3kiLAogICAgICAgICAgICA4OC4yLCA4OS4yLCA5MC4zLCBleHAyX19ncmV5X25hbWluZ19ub3JtcyRncmV5X25hbWluZ19hY2NfbWVhbiwgZXhwMl9fY29sX25hbWluZ19ub3JtcyRleHAyX19jb2xfbmFtaW5nX2FjY19tZWFuLAogICAgICAgICJTRCAtIE5hbWluZyBhY2N1cmFjeSIsCiAgICAgICAgICAgIDE3LjEsIDE3LjIsIDE2LjksIGV4cDJfX2dyZXlfbmFtaW5nX25vcm1zJGdyZXlfbmFtaW5nX2FjY19zZCwgZXhwMl9fY29sX25hbWluZ19ub3JtcyRleHAyX19jb2xfbmFtaW5nX2FjY19zZCwKICAgICAgICAiTmFtaW5nIGFncmVlbWVudCAoSCkiLAogICAgICAgICAgICAwLjQ0LCAwLjM4LCAwLjMyLCBleHAyX19ncmV5X25hbWluZ19ub3JtcyRncmV5X0hfbWVhbiwgZXhwMl9fY29sX25hbWluZ19ub3JtcyRjb2xfSF9tZWFuLAogICAgICAgICJTRCAtIE5hbWluZyBhZ3JlZW1lbnQgKEgpIiwKICAgICAgICAgICAgMC41NiwgMC41MiwgMC40NiwgZXhwMl9fZ3JleV9uYW1pbmdfbm9ybXMkZ3JleV9IX3NkLCBleHAyX19jb2xfbmFtaW5nX25vcm1zJGNvbF9IX3NkLAogICAgICAgICJwYWRkaW5nIiwKICAgICAgICAgICAgTkEsIE5BLCBOQSwgTkEsIE5BLAogICAgICAgICJNZW50YWwgaW1hZ2VyeSBhZ3JlZW1lbnQiLAogICAgICAgICAgICAzLjczLCAzLjc2LCAzLjc0LCBleHAyX19ncmV5X21lbl9pbWFfbWVhbnMkZ3JleV9tZW5pbWFfbWVhbiwgZXhwMl9fY29sX2V4cDJfX21lbl9pbWFfbWVhbnMkY29sX21lbmltYV9tZWFuLAogICAgICAgICJTRCAtIE1lbnRhbCBpbWFnZXJ5IGFncmVlbWVudCIsCiAgICAgICAgICAgIDAuNDgsIDAuNTUsIDAuNjMsIGV4cDJfX2dyZXlfbWVuX2ltYV9tZWFucyRncmV5X21lbmltYV9zZCwgZXhwMl9fY29sX2V4cDJfX21lbl9pbWFfbWVhbnMkY29sX21lbmltYV9zZCwKICAgICAgICAicGFkZGluZzIiLAogICAgICAgICAgICBOQSwgTkEsIE5BLCBOQSwgTkEsCiAgICAgICAgIkZhbWlsaWFyaXR5IiwKICAgICAgICAgICAgMy41OSwgMy41MiwgMy40NCwgZXhwMl9fZ3JleV9mYW1fbWVhbnMkZ3JleV9mYW1fbWVhbiwgZXhwMl9fY29sX2ZhbV9tZWFucyRjb2xfZmFtX21lYW4sCiAgICAgICAgIlNEIC0gRmFtaWxpYXJpdHkiLAogICAgICAgICAgICAwLjk0LCAxLjAxLCAxLjAxLCBleHAyX19ncmV5X2ZhbV9tZWFucyRncmV5X2ZhbV9zZCwgZXhwMl9fY29sX2ZhbV9tZWFucyRjb2xfZmFtX3NkLAogICAgICAgICJwYWRkaW5nMyIsCiAgICAgICAgICAgIE5BLCBOQSwgTkEsIE5BLCBOQSwKICAgICAgICAiVmlzdWFsIGNvbXBsZXhpdHkiLAogICAgICAgICAgICAyLjc2LCAyLjg4LCAyLjcwLCBleHAyX19ncmV5X3Zpc19jb21fbWVhbnMkZXhwMl9fZ3JleV92aXNfY29tX21lYW4sIGV4cDJfX2NvbF92aXNfY29tX21lYW5zJGV4cDJfX2NvbF92aXNfY29tX21lYW4sCiAgICAgICAgIlNEIC0gVmlzdWFsIGNvbXBsZXhpdHkiLAogICAgICAgICAgICAxLjAzLCAxLjAzLCAwLjk0LCBleHAyX19ncmV5X3Zpc19jb21fbWVhbnMkZXhwMl9fZ3JleV92aXNfY29tX3NkLCBleHAyX19jb2xfdmlzX2NvbV9tZWFucyRleHAyX19jb2xfdmlzX2NvbV9zZCwKICAgICAgICAicGFkZGluZzQiLAogICAgICAgICAgICBOQSwgTkEsIE5BLCBOQSwgTkEsCiAgICAgICAgIkNvbG91ciBkaWFnbm9zdGljaXR5IiwKICAgICAgICAgICAgTkEsIE5BLCBOQSwgTkEsIGV4cDJfX2NvbF9kaWFfbWVhbnMkY29sX2NvbGRpYV9tZWFuLAogICAgICAgICJTRCAtIENvbG91ciBkaWFnbm9zdGljaXR5IiwKICAgICAgICAgICAgTkEsIE5BLCBOQSwgTkEsIGV4cDJfX2NvbF9kaWFfbWVhbnMkY29sX2NvbGRpYV9zZCkKICAgIAogICAgZXhwMl9fY29sdnNncmV5bm9ybXNfdGFibGUgPC0gZXhwMl9fY29sdnNncmV5bm9ybXMgJT4lCiAgICAgICAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIH5yb3VuZCguLCAyKSkgJT4lCiAgICAgICAgbXV0YXRlX2FsbChhcy5jaGFyYWN0ZXIpICU+JQogICAgICAgIG11dGF0ZShsaW5lcyA9IAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFjY3VyYWN5Iiwgc3RyX2MoIigiLCBsaW5lcywgIikiKSwKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIE5hbWluZyBhZ3JlZW1lbnQgKEgpIiwgc3RyX2MoIigiLCBsaW5lcywgIikiKSwgCiAgICAgICAgICAgIGlmZWxzZShWYXJpYWJsZSA9PSAiU0QgLSBNZW50YWwgaW1hZ2VyeSBhZ3JlZW1lbnQiLCBzdHJfYygiKCIsIGxpbmVzLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIEZhbWlsaWFyaXR5Iiwgc3RyX2MoIigiLCBsaW5lcywgIikiKSwgCiAgICAgICAgICAgIGlmZWxzZShWYXJpYWJsZSA9PSAiU0QgLSBWaXN1YWwgY29tcGxleGl0eSIsIHN0cl9jKCIoIiwgbGluZXMsICIpIiksIAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gQ29sb3VyIGRpYWdub3N0aWNpdHkiLCBzdHJfYygiKCIsIGxpbmVzLCAiKSIpLCBsaW5lcykpKSkpKSkgJT4lCiAgICAgICAgbXV0YXRlKGdyZXlfc2hhZGVkID0gCiAgICAgICAgICAgIGlmZWxzZShWYXJpYWJsZSA9PSAiU0QgLSBOYW1pbmcgYWNjdXJhY3kiLCBzdHJfYygiKCIsIGdyZXlfc2hhZGVkLCAiKSIpLAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFncmVlbWVudCAoSCkiLCBzdHJfYygiKCIsIGdyZXlfc2hhZGVkLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIE1lbnRhbCBpbWFnZXJ5IGFncmVlbWVudCIsIHN0cl9jKCIoIiwgZ3JleV9zaGFkZWQsICIpIiksIAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gRmFtaWxpYXJpdHkiLCBzdHJfYygiKCIsIGdyZXlfc2hhZGVkLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIFZpc3VhbCBjb21wbGV4aXR5Iiwgc3RyX2MoIigiLCBncmV5X3NoYWRlZCwgIikiKSwgCiAgICAgICAgICAgIGlmZWxzZShWYXJpYWJsZSA9PSAiU0QgLSBDb2xvdXIgZGlhZ25vc3RpY2l0eSIsIHN0cl9jKCIoIiwgZ3JleV9zaGFkZWQsICIpIiksIGdyZXlfc2hhZGVkKSkpKSkpKSAlPiUKICAgICAgICBtdXRhdGUoY29sX3NoYWRlZCA9IAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFjY3VyYWN5Iiwgc3RyX2MoIigiLCBjb2xfc2hhZGVkLCAiKSIpLAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFncmVlbWVudCAoSCkiLCBzdHJfYygiKCIsIGNvbF9zaGFkZWQsICIpIiksIAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTWVudGFsIGltYWdlcnkgYWdyZWVtZW50Iiwgc3RyX2MoIigiLCBjb2xfc2hhZGVkLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIEZhbWlsaWFyaXR5Iiwgc3RyX2MoIigiLCBjb2xfc2hhZGVkLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIFZpc3VhbCBjb21wbGV4aXR5Iiwgc3RyX2MoIigiLCBjb2xfc2hhZGVkLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIENvbG91ciBkaWFnbm9zdGljaXR5Iiwgc3RyX2MoIigiLCBjb2xfc2hhZGVkLCAiKSIpLCBjb2xfc2hhZGVkKSkpKSkpKSAlPiUKICAgICAgICBtdXRhdGUoZ3JleV9waG90byA9IAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFjY3VyYWN5Iiwgc3RyX2MoIigiLCBncmV5X3Bob3RvLCAiKSIpLAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFncmVlbWVudCAoSCkiLCBzdHJfYygiKCIsIGdyZXlfcGhvdG8sICIpIiksIAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTWVudGFsIGltYWdlcnkgYWdyZWVtZW50Iiwgc3RyX2MoIigiLCBncmV5X3Bob3RvLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIEZhbWlsaWFyaXR5Iiwgc3RyX2MoIigiLCBncmV5X3Bob3RvLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIFZpc3VhbCBjb21wbGV4aXR5Iiwgc3RyX2MoIigiLCBncmV5X3Bob3RvLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIENvbG91ciBkaWFnbm9zdGljaXR5Iiwgc3RyX2MoIigiLCBncmV5X3Bob3RvLCAiKSIpLCBncmV5X3Bob3RvKSkpKSkpKSAlPiUKICAgICAgICBtdXRhdGUoY29sX3Bob3RvID0gCiAgICAgICAgICAgIGlmZWxzZShWYXJpYWJsZSA9PSAiU0QgLSBOYW1pbmcgYWNjdXJhY3kiLCBzdHJfYygiKCIsIGNvbF9waG90bywgIikiKSwKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIE5hbWluZyBhZ3JlZW1lbnQgKEgpIiwgc3RyX2MoIigiLCBjb2xfcGhvdG8sICIpIiksIAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTWVudGFsIGltYWdlcnkgYWdyZWVtZW50Iiwgc3RyX2MoIigiLCBjb2xfcGhvdG8sICIpIiksIAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gRmFtaWxpYXJpdHkiLCBzdHJfYygiKCIsIGNvbF9waG90bywgIikiKSwgCiAgICAgICAgICAgIGlmZWxzZShWYXJpYWJsZSA9PSAiU0QgLSBWaXN1YWwgY29tcGxleGl0eSIsIHN0cl9jKCIoIiwgY29sX3Bob3RvLCAiKSIpLCAKICAgICAgICAgICAgaWZlbHNlKFZhcmlhYmxlID09ICJTRCAtIENvbG91ciBkaWFnbm9zdGljaXR5Iiwgc3RyX2MoIigiLCBjb2xfcGhvdG8sICIpIiksIGNvbF9waG90bykpKSkpKSkgJT4lCiAgICAgICAgbXV0YXRlKGxpbmVzID0gcmVwbGFjZV9uYShsaW5lcywgIi0iKSkgJT4lCiAgICAgICAgbXV0YXRlKGdyZXlfc2hhZGVkID0gcmVwbGFjZV9uYShncmV5X3NoYWRlZCwgIi0iKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbF9zaGFkZWQgPSByZXBsYWNlX25hKGNvbF9zaGFkZWQsICItIikpICU+JQogICAgICAgIG11dGF0ZShncmV5X3Bob3RvID0gcmVwbGFjZV9uYShncmV5X3Bob3RvLCAiLSIpKSAlPiUKICAgICAgICBtdXRhdGUoY29sX3Bob3RvID0gcmVwbGFjZV9uYShjb2xfcGhvdG8sICItIikpICU+JQogICAgICAgIG11dGF0ZShWYXJpYWJsZSA9IAogICAgICAgICAgICBpZmVsc2UoVmFyaWFibGUgPT0gIlNEIC0gTmFtaW5nIGFjY3VyYWN5IiB8IFZhcmlhYmxlID09ICJTRCAtIE5hbWluZyBhZ3JlZW1lbnQgKEgpIiB8CiAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSA9PSAiU0QgLSBNZW50YWwgaW1hZ2VyeSBhZ3JlZW1lbnQiIHwgVmFyaWFibGUgPT0gIlNEIC0gRmFtaWxpYXJpdHkiIHwKICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlID09ICJTRCAtIFZpc3VhbCBjb21wbGV4aXR5IiB8IFZhcmlhYmxlID09ICJTRCAtIENvbG91ciBkaWFnbm9zdGljaXR5IiB8CiAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSA9PSAicGFkZGluZyIgfCBWYXJpYWJsZSA9PSAicGFkZGluZzIiIHwgVmFyaWFibGUgPT0gInBhZGRpbmczIiB8CiAgICAgICAgICAgICAgICAgICBWYXJpYWJsZSA9PSAicGFkZGluZzQiLCIiLCBWYXJpYWJsZSkpICU+JQogICAgICAgIHJlbmFtZSgiICIgPSAiVmFyaWFibGUiLCAiUyZWIGxpbmVzIiA9ICJsaW5lcyIsICJHcmV5IHNoYWRlZCIgPSAiZ3JleV9zaGFkZWQiLAogICAgICAgICAgICAgICAiQ29sb3VyIHNoYWRlZCIgPSAiY29sX3NoYWRlZCIsICJHcmV5IHBob3RvcyIgPSAiZ3JleV9waG90byIsIAogICAgICAgICAgICAgICAiQ29sb3VyIHBob3RvcyIgPSAiY29sX3Bob3RvIikgJT4lCiAgICAgICAgbXV0YXRlKCIgICIgPSAiIikgJT4lCiAgICAgICAgc2VsZWN0KCIgIiwgIlMmViBsaW5lcyIsICJHcmV5IHNoYWRlZCIsICJDb2xvdXIgc2hhZGVkIiwgIiAgIiwgIkdyZXkgcGhvdG9zIiwgIkNvbG91ciBwaG90b3MiKQogICAgCiAgICBleHAyX19jb2x2c2dyZXlub3Jtc190YWJsZVs1LDJdIDwtICIiCiAgICBleHAyX19jb2x2c2dyZXlub3Jtc190YWJsZVs1LDNdIDwtICIiCiAgICBleHAyX19jb2x2c2dyZXlub3Jtc190YWJsZVs1LDRdIDwtICIiCiAgICBleHAyX19jb2x2c2dyZXlub3Jtc190YWJsZVs1LDZdIDwtICIiCiAgICBleHAyX19jb2x2c2dyZXlub3Jtc190YWJsZVs1LDddIDwtICIiCiAgICAKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzgsMl0gPC0gIiIKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzgsM10gPC0gIiIKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzgsNF0gPC0gIiIKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzgsNl0gPC0gIiIKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzgsN10gPC0gIiIKICAgIAogICAgZXhwMl9fY29sdnNncmV5bm9ybXNfdGFibGVbMTEsMl0gPC0gIiIKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzExLDNdIDwtICIiCiAgICBleHAyX19jb2x2c2dyZXlub3Jtc190YWJsZVsxMSw0XSA8LSAiIgogICAgZXhwMl9fY29sdnNncmV5bm9ybXNfdGFibGVbMTEsNl0gPC0gIiIKICAgIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlWzExLDddIDwtICIiCiAgICAKYGBgCgojIyBSZXN1bHRzClN1bW1hcnkgc3RhdGlzdGljcyAobWVhbiBhbmQgKlNEKikgZm9yIGVhY2ggb2YgdGhlIG1lYXN1cmVkIHZhcmlhYmxlcyBhcmUgc2hvd24gaW4gYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyX19jb2x2c2dyZXlub3Jtcy0tdGFibGVjYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgLiBEYXRhIGZvciB0aGUgZ3JleSBhbmQgY29sb3VyIHBob3RvZ3JhcGhzIGFyZSBwcmVzZW50ZWQgYWxvbmdzaWRlIHByZXZpb3VzbHkgb2J0YWluZWQgbm9ybWF0aXZlIHZhbHVlcyBmb3IgYSBudW1iZXIgb2Ygb3RoZXIgc3RpbXVsaSBmb3JtYXRzIChhbGwgb2J0YWluZWQgZnJvbSBAcm9zc2lvbjIwMDQsIHdobyBwdWJsaXNoZWQgcmV2aXNlZCBub3JtcyBmb3IgQHNub2RncmFzczE5ODAncyAoUyZWKSBvcmlnaW5hbCBsaW5lIGRyYXdpbmdzLCBhcyB3ZWxsIGFzIHRoZWlyIG93biByZS1kcmF3biB2ZXJzaW9ucyB0aGF0IGNvbnRhaW5lZCBzaGFkaW5nIGFuZCB0ZXh0dXJlIGRldGFpbCkuIFRoZSBkYXRhIGZyb20gcHJldmlvdXMgc3R1ZGllcyB3ZXJlIG5vdCB1c2VkIGluIGFueSBzdGF0aXN0aWNhbCBhbmFseXNlcy4gVG8gZXhhbWluZSB3aGV0aGVyIHRoZSBncmV5IGFuZCBjb2xvdXIgcGhvdG9ncmFwaHMgZnJvbSB0aGUgY3VycmVudCBzdHVkeSBkZW1vbnN0cmF0ZWQgYW55IGRpZmZlcmVuY2VzLCBhIHNlcmllcyBvZiBpbmRlcGVuZGVudCBzYW1wbGVzIHQtdGVzdHMgd2VyZSBydW4gb24gZWFjaCB2YXJpYWJsZSwgYXMgd2VsbCBhcyB0aGVpciBjb3JyZXNwb25kaW5nIHJlYWN0aW9uIHRpbWVzIChleGNsdWRpbmcgc2NvcmVzIG9mIGNvbG91ciBkaWFnbm9zdGljaXR5LCB3aGljaCB3ZXJlIG9idGFpbmVkIG9ubHkgaW4gcmVzcG9uc2UgdG8gdGhlIGNvbG91ciBpdGVtcyBhbmQgdGh1cyBjYW5ub3QgYmUgY29tcGFyZWQpLiBNZWFuIChhbmQgKlNEKikgdmFsdWVzIGZvciBhbGwgeDgxNiB1bmlxdWUgcGhvdG9ncmFwaCBpdGVtcyBhcmUgcHJlc2VudGVkIGluIEFwcGVuZGl4IEIuIAoKYGBge3IgLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgdGFibGVfbnVtYmVyaW5nKG5hbWUgPSAiZXhwMl9fY29sdnNncmV5bm9ybXMtLXRhYmxlY2FwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiU3VtbWFyeSBzdGF0aXN0aWNzIGZvciBlYWNoIG9mIHRoZSBtZWFzdXJlZCB2YXJpYWJsZXMuIE1lYW4gdmFsdWVzIGFyZSBwcmVzZW50ZWQgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gYm9sZCAoU0RzIGFyZSBzaG93biBpbiBwYXJlbnRoZXNlcykuIikKYGBgCgojIyMgKk5hbWluZyoKTmFtaW5nIGFjY3VyYWN5IHdhcyB2ZXJ5IGhpZ2ggZm9yIGFsbCBwaG90b2dyYXBocyAoKk0qID0gYHIgZXhwMl9fbWVhbl9uYW1pbmdfYWNjYCksIGluZGljYXRpbmcgdGhhdCBvdmVyYWxsLCB0aGUgc2VsZWN0ZWQgaXRlbXMgY2xvc2VseSBkZXBpY3RlZCB0aGUgaW50ZW5kZWQgY29uY2VwdHMuIENvbXBhcmVkIHdpdGggdGhlIG90aGVyIHN0aW11bGkgZm9ybWF0cywgdGhlcmUgYXBwZWFycyB0byBiZSBhIHN0ZWFkeSBpbmNyZWFzZSBpbiBhY2N1cmFjeSBhcyBpdGVtcyBiZWNvbWUgbW9yZSBkaXN0aW5jdGl2ZSAoc2VlIGByIHRhYmxlX251bWJlcmluZygiZXhwMl9fY29sdnNncmV5bm9ybXMtLXRhYmxlY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuIEFjY3VyYWN5IHJhdGVzIGRpZCBub3QgZGlmZmVyIGJldHdlZW4gdGhlIGdyZXkgKCpNKiA9IGByIGV4cDJfX21lYW5fZ3JleV9uYW1pbmdfYWNjYCkgYW5kIGNvbG91ciAoKk0qID0gYHIgZXhwMl9fbWVhbl9jb2xfbmFtaW5nX2FjY2ApIHZlcnNpb25zIG9mIHRoZSBwaG90b2dyYXBocyBbYHIgZXhwMl9fYXBhX19uYW1pbmdfYWNjX190dGVzdCRzdGF0aXN0aWNgXS4KCipIKiB2YWx1ZXMgd2VyZSBhbHNvIGxvdyBhY3Jvc3MgYWxsIGl0ZW1zICgqTSogPSBgciBleHAyX19tZWFuX0hfc3RhdGApLCBzaG93aW5nIHRoYXQgc3ViamVjdHMgZ2VuZXJhbGx5IGFncmVlZCBvbiBob3cgdGhlIGl0ZW1zIHNob3VsZCBiZSBuYW1lZC4gU2ltaWxhciB0byBuYW1pbmcgYWNjdXJhY3ksIG5hbWluZyBhZ3JlZW1lbnQgYWxzbyBhcHBlYXJzIHRvIHN0ZWFkaWx5IGluY3JlYXNlIGFzIGl0ZW1zIGJlY29tZSBtb3JlIGRpc3RpbmN0aXZlIChhcyBpbmRpY2F0ZWQgYnkgZGVjcmVhc2luZyBIIHZhbHVlcyAtIHNlZSBgciB0YWJsZV9udW1iZXJpbmcoImV4cDJfX2NvbHZzZ3JleW5vcm1zLS10YWJsZWNhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWAuIFdoaWxlIEByb3NzaW9uMjAwNCBvYnNlcnZlZCBzaWduaWZpY2FudGx5IGJldHRlciBuYW1pbmcgYWdyZWVtZW50IGZvciB0aGVpciBjb2xvdXIgLSByYXRoZXIgdGhhbiBncmV5c2NhbGUgLSBpdGVtcywgdGhpcyBwYXR0ZXJuIGRpZCBub3QgcmVhY2ggc2lnbmlmaWNhbmNlIHdpdGggdGhlIGN1cnJlbnQgc2V0IG9mIHBob3RvZ3JhcGhzOyAqSCogdmFsdWVzIGRpZCBub3QgZGlmZmVyIGJldHdlZW4gdGhlIGdyZXkgKCpNKiA9IGByIGV4cDJfX21lYW5fZ3JleV9IX3N0YXRgKSBhbmQgY29sb3VyICgqTSogPSBgciBleHAyX19tZWFuX2NvbF9IX3N0YXRgKSBwaG90b2dyYXBocyBbYHIgZXhwMl9fYXBhX19IX3N0YXRfX3R0ZXN0JHN0YXRpc3RpY2BdLgoKQSBtZWFuIHJlYWN0aW9uIHRpbWUgKFJUKSBvZiAoYHIgZXhwMl9fbWVhbl9uYW1pbmdfcnRgcykgd2FzIG9ic2VydmVkIGZvciBuYW1pbmcgcmVzcG9uc2VzLiBXaGlsZSB0aGlzIHdhcyBvZiBsaXR0bGUgaW50ZXJlc3Qgb24gaXRzIG93biwgYW5kIGNvdWxkIG5vdCBiZSBjb21wYXJlZCB0byB0aG9zZSBvYnRhaW5lZCBpbiByZXNwb25zZSB0byB0aGUgb3RoZXIgc3RpbXVsaSBmb3JtYXRzIGFzIG91ciBtZXRob2RvbG9neSB3YXMgc2xpZ2h0bHkgZGlmZmVyZW50IChSVHMgd2VyZSBvbmx5IHJlY29yZGVkIHdoZW4gc3ViamVjdHMgaGFkIHR5cGVkIHRoZWlyIHJlc3BvbnNlICphbmQqIGNsaWNrZWQgdGhlIG1vdXNlIHRvIHNpZ25pZnkgdGhleSBoYWQgZmluaXNoZWQpLCB0aGV5IHdlcmUgdXNlZnVsIGZvciBtYXJraW5nIGNvbXBhcmlzb25zIGJldHdlZW4gdGhlIGdyZXkgYW5kIGNvbG91ciBpdGVtcyAodGhvdWdoIG5vIGRpZmZlcmVuY2Ugd2FzIG9ic2VydmVkIFsqTSogZ3JleSA9IGByIGV4cDJfX21lYW5fZ3JleV9uYW1pbmdfcnRgcywgKk0qIGNvbG91ciA9IGByIGV4cDJfX21lYW5fY29sX25hbWluZ19ydGBzLCBgciBleHAyX19hcGFfX25hbWluZ19ydF9fdHRlc3Qkc3RhdGlzdGljYF0pLiBPdmVyYWxsLCB0aGVzZSBhbmFseXNlcyBzdWdnZXN0IHRoYXQgdGhlIGN1cnJlbnQgcGhvdG9ncmFwaHMgY2xvc2VseSByZXNlbWJsZSB0aGUgZHJhd2luZ3MgdGhleSB3ZXJlIGRlc2lnbmVkIHRvIG1hdGNoLCB3aXRoIGhpZ2ggbGV2ZWxzIG9mIG5hbWluZyBhY2N1cmFjeSBhbmQgYWdyZWVtZW50IGFtb25nIHN1YmplY3RzLiBUaGUgYWJzZW5jZSBvZiBhbnkgY29sb3VyIGRpZmZlcmVuY2VzIGluZGljYXRlcyB0aGVyZSB3ZXJlIG5vIG5hbWluZyBhZHZhbnRhZ2VzIHdoZW4gcGhvdG9ncmFwaHMgd2VyZSBtYWRlIGV2ZW4gbW9yZSBkaXN0aW5jdGl2ZSB0aHJvdWdoIHRoZSBhZGRpdGlvbiBvZiBjb2xvdXIuIAoKYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyX19jb2x2c2dyZXlub3Jtcy0tdGFibGVjYXB0aW9uIilgCmBgYHtyLCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQogIGV4cDJfX2NvbHZzZ3JleW5vcm1zX3RhYmxlICU+JQogICAgICBrYWJsZSgibGF0ZXgiLCBib29rdGFicyA9IFQsIGFsaWduID0gImxjY2NjY2MiKSAlPiUKICAgICAga2FibGVfc3R5bGluZyhsYXRleF9vcHRpb25zID0gYygiaG9sZF9wb3NpdGlvbiIsICJjb25kZW5zZWQiKSkgJT4lCiAgICAgIGFkZF9oZWFkZXJfYWJvdmUoYygiICIgPSAxLCAiUm9zc2lvbiAmIFBvdXJ0b2lzICgyMDA0KSIgPSAzLCAiICIgPSAxLCAiQ3VycmVudCBzdHVkeSIgPSAyKSkgJT4lCiAgICAgIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjEzZW0iKSAlPiUKICAgICAgY29sdW1uX3NwZWMoMjo0LCB3aWR0aCA9ICIzLjhlbSIpICU+JQogICAgICBjb2x1bW5fc3BlYyg1LCB3aWR0aCA9ICIyZW0iKSAlPiUKICAgICAgY29sdW1uX3NwZWMoNjo3LCB3aWR0aCA9ICIzLjhlbSIpICU+JQogICAgICByb3dfc3BlYyhjKDEsMyw2LDksMTIsMTUpLCBib2xkID0gVFJVRSkgJT4lCiAgICAgIHJvd19zcGVjKGMoMiw0LDcsMTAsMTMsMTYpLCBpdGFsaWMgPSBUUlVFKQpgYGAKCiMjIyAqTWVudGFsIGltYWdlcnkgYWdyZWVtZW50KgpTY29yZXMgb2YgbWVudGFsIGltYWdlcnkgYWdyZWVtZW50IHdlcmUgbW9kZXJhdGUgYWNyb3NzIGFsbCBpdGVtcyAoKk0qID0gYHIgZXhwMl9fbWVhbl9tZW5faW1hYCkuIFdoaWxlIG5vIGNvbG91ciBkaWZmZXJlbmNlcyB3ZXJlIHByZXZpb3VzbHkgb2JzZXJ2ZWQgYmV0d2VlbiBzdGltdWxpIGZvcm1hdHMsIHRoZSBncmV5ICgqTSogPSBgciBleHAyX19tZWFuX2dyZXlfbWVuX2ltYWApIHBob3RvZ3JhcGhzIGluIHRoZSBjdXJyZW50IHN0dWR5IHNob3dlZCBzaWduaWZpY2FudGx5IGxvd2VyIG1lbnRhbCBpbWFnZXJ5IGFncmVlbWVudCBzY29yZXMgdGhhbiB0aGUgY29sb3VyICgqTSogPSBgciBleHAyX19tZWFuX2NvbF9tZW5faW1hYCkgaXRlbXMgW2ByIGV4cDJfX2FwYV9fZXhwMl9fbWVuX2ltYV9fdHRlc3Qkc3RhdGlzdGljYF0uIENvbXBhcmlzb25zIHdpdGggcHJldmlvdXMgbm9ybWF0aXZlIGRhdGEgYWxzbyBoaWdobGlnaHQgaG93IHRoZSBncmV5IHBob3RvZ3JhcGhzIGV4aGliaXRlZCB1bmlxdWVseSBwb29yZXIgbWVudGFsIGltYWdlcnkgYWdyZWVtZW50IHNjb3JlcyB0aGFuIGFueSBvZiB0aGUgb3RoZXIgc3RpbXVsaSBmb3JtYXRzIChzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyX19jb2x2c2dyZXlub3Jtcy0tdGFibGVjYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKS4gUlRzIGJldHdlZW4gdGhlIGdyZXkgKCpNKiA9IGByIGV4cDJfX21lYW5fZ3JleV9tZW5faW1hX3J0YCkgYW5kIGNvbG91ciAoKk0qID0gYHIgZXhwMl9fbWVhbl9jb2xfbWVuX2ltYV9ydGApIGl0ZW1zIGRpZCBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXIgW2ByIGV4cDJfX2FwYV9fZXhwMl9fbWVuX2ltYV9ydF9fdHRlc3Qkc3RhdGlzdGljYF0uCgojIyMgKkZhbWlsaWFyaXR5KgpGYW1pbGlhcml0eSBzY29yZXMgd2VyZSBoaWdoIG92ZXJhbGwgKCpNKiA9IGByIGV4cDJfX21lYW5fZmFtYCksIGFuZCBsaWtlIHByZXZpb3VzIGZpbmRpbmdzLCB0aGVyZSB3YXMgbm8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBncmV5ICgqTSogPSBgciBleHAyX19tZWFuX2dyZXlfZmFtYCkgYW5kIGNvbG91ciAoKk0qID0gYHIgZXhwMl9fbWVhbl9jb2xfZmFtYCkgaXRlbXMgW2ByIGV4cDJfX2FwYV9fZmFtX190dGVzdCRzdGF0aXN0aWNgXS4gSG93ZXZlciwgZmFtaWxpYXJpdHkgc2NvcmVzIGZvciB0aGUgY3VycmVudCBzZXQgb2YgcGhvdG9ncmFwaHMgd2VyZSBoaWdoZXIgdGhhbiB0aG9zZSBvYnRhaW5lZCBmb3IgYW55IG9mIHRoZSBvdGhlciBzdGltdWxpIGZvcm1hdHMsIGFuZCB3aGlsZSB0aGVyZSBwcmV2aW91c2x5IGFwcGVhcmVkIHRvIGJlIGEgZGVjbGluZSBpbiBmYW1pbGlhcml0eSBhcyBzdGltdWxpIGJlY29tZSBtb3JlIGRpc3RpbmN0aXZlIChmcm9tIGxpbmUgZHJhd2luZ3MsIHRvIGdyZXkgc2hhZGVkLCB0byBjb2xvdXIgc2hhZGVkKSwgc3VjaCBhIHBhdHRlcm4gd2FzIG5vdCBldmlkZW50IHdpdGggdGhlIGN1cnJlbnQgcGhvdG9ncmFwaHMgKHNlZSBgciB0YWJsZV9udW1iZXJpbmcoImV4cDJfX2NvbHZzZ3JleW5vcm1zLS10YWJsZWNhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWApLiBSVHMgYmV0d2VlbiB0aGUgZ3JleSAoKk0qID0gYHIgZXhwMl9fbWVhbl9ncmV5X2ZhbV9ydGApIGFuZCBjb2xvdXIgKCpNKiA9IGByIGV4cDJfX21lYW5fY29sX2ZhbV9ydGApIGl0ZW1zIGRpZCBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXIgW2ByIGV4cDJfX2FwYV9fZmFtX3J0X190dGVzdCRzdGF0aXN0aWNgXS4KCiMjIyAqVmlzdWFsIGNvbXBsZXhpdHkqClZpc3VhbCBjb21wbGV4aXR5IHJhdGluZ3Mgd2VyZSBtb2RlcmF0ZSBhY3Jvc3MgYWxsIG9mIHRoZSBpdGVtcyAoKk0qID0gYHIgZXhwMl9fbWVhbl92aXNjb21fcnRgKS4gQ29sb3VyICgqTSogPSBgciBleHAyX19tZWFuX2NvbF92aXNfY29tYCkgcGhvdG9ncmFwaHMgc2hvd2VkIHNpZ25pZmljYW50bHkgaGlnaGVyIHNjb3JlcyBvZiB2aXN1YWwgY29tcGxleGl0eSB0aGFuIGdyZXkgKCpNKiA9IGByIGV4cDJfX21lYW5fZ3JleV92aXNfY29tYCkgcGhvdG9ncmFwaHMgW2ByIGV4cDJfX2FwYV9fdmlzX2NvbV9fdHRlc3Qkc3RhdGlzdGljYF0uIFRoaXMgZmluZGluZyBpcyBmdXJ0aGVyIGRlbW9uc3RyYXRlZCB3aGVuIGNvbXBhcmVkIHRvIHRoZSBzY29yZXMgZnJvbSB0aGUgb3RoZXIgc3RpbXVsaSBmb3JtYXRzIChzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyX19jb2x2c2dyZXlub3Jtcy0tdGFibGVjYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKTsgd2hlcmUgZ3JleSBwaG90b2dyYXBocyBzaG93IGNvbXBhcmFibGUgbGV2ZWxzIG9mIHZpc3VhbCBjb21wbGV4aXR5LCB0aGUgY29sb3VyIHBob3RvZ3JhcGhzIHNob3cgaGlnaGVyIHNjb3JlcyB0aGFuIGFsbCBvZiB0aGUgb3RoZXIgZm9ybWF0cy4gVGhlcmUgd2FzIG5vIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgUlRzIG9mIGdyZXkgKCpNKiA9IGByIGV4cDJfX21lYW5fZ3JleV92aXNjb21fcnRgKSBhbmQgY29sb3VyICgqTSogPSBgciBleHAyX19tZWFuX2NvbF92aXNjb21fcnRgKSBpdGVtcyBbYHIgZXhwMl9fYXBhX192aXNfY29tX3J0X190dGVzdCRzdGF0aXN0aWNgXS4KCiMjIyAqU2VsZWN0aW9uIG9mIGZpbmFsIGl0ZW1zKgpGb3IgZWFjaCBjb25jZXB0IHJlcHJlc2VudGVkIGluIHRoZSBwaG90b2dyYXBocywgb25lIHZhcmlhdGlvbiAoZS5nLiBzaG9lLTEsIHNob2UtMiwgb3Igc2hvZS0zKSB3YXMgc2VsZWN0ZWQgZm9yIGluY2x1c2lvbiBpbiBhIGZpbmFsIGxpc3Qgb2Ygc3RpbXVsaSB0aGF0IHdvdWxkIGJlIHRha2VuIGZvcndhcmQgaW50byBzdWJzZXF1ZW50IHJlY29nbml0aW9uIGV4cGVyaW1lbnRzLiBUaGUgbm9ybWF0aXZlIG5hbWluZyBkYXRhIHdhcyBhc3Nlc3NlZCB0byBlc3RhYmxpc2ggd2hpY2ggdmVyc2lvbiBiZXN0IG1hdGNoZWQgdGhlIGV4aXN0aW5nIGxpbmUtZHJhd24gZGVwaWN0aW9ucyBvZiB0aGUgY29uY2VwdHMgW0Byb3NzaW9uMjAwNF0uIE5hbWluZyB3YXMgZmF2b3VyZWQgb3ZlciBhbGwgb2YgdGhlIG90aGVyIHZhcmlhYmxlcyBhcywgaWYgYW4gaXRlbSB3YXMgZm91bmQgdG8gcHJpbWFyaWx5IGNvbnZleSBhIGRpZmZlcmVudCBjb25jZXB0IHRoYW4gd2FzIGludGVuZGVkIGR1cmluZyB0aGUgbmFtaW5nIHRhc2sgKGUuZy4gaWYgYSBwaG90b2dyYXBoIG9mIHRoZSBmcnVpdCAnb3JhbmdlJyB3YXMgbGFiZWxsZWQgJ2dyYXBlZnJ1aXQnIGJ5IHRoZSBtYWpvcml0eSBvZiBzdWJqZWN0cyksIHRoZW4gaXQgY291bGQgbm90IGJlIHN1ZmZpY2llbnRseSBjb21wYXJlZCB0byBpdHMgbGluZS1kcmF3biAoYW5kIHdyaXR0ZW4td29yZCkgY291bnRlcnBhcnQgZHVyaW5nIHJlY29nbml0aW9uIHN0dWRpZXMuIAoKQXQgbGVhc3QgMjAgdW5pcXVlIG5hbWluZyByZXNwb25zZXMgd2VyZSBjb2xsZWN0ZWQgZm9yIGVhY2ggb2YgdGhlIDgxNiBwaG90b2dyYXBocyAoNDA4IGdyZXkgaXRlbXMgYW5kIDQwOCBjb2xvdXIgaXRlbXMpLiBUaGUgcHJvcG9ydGlvbiBvZiAnY29ycmVjdCcgcmVzcG9uc2VzIChpLmUuIG5hbWVzIHRoYXQgd2VyZSBjb25ncnVlbnQgd2l0aCB0aGUgaW50ZW5kZWQgY29uY2VwdCkgYW5kIHRoZSBwcm9wb3J0aW9uIG9mICdkb24ndCBrbm93JyByZXNwb25zZXMgd2VyZSBjYWxjdWxhdGVkIGZvciBlYWNoIGl0ZW0uIFBob3RvZ3JhcGhzIHdlcmUgZXhjbHVkZWQgaWYgdGhleToKCjEuIHJlY2VpdmVkIGEgaGlnaCBwcm9wb3J0aW9uIG9mICJkb24ndCBrbm93IiByZXNwb25zZXMgKDIwJTsgYWxsIG9mIHRoZSBwaG90b2dyYXBocyBkZXBpY3RlZCBjb21tb24sIGV2ZXJ5ZGF5IG9iamVjdHMsIGFuZCBzbyBpZiBhIG51bWJlciBvZiBzdWJqZWN0cyB3ZXJlIHVuYWJsZSB0byBuYW1lIHRoZSBpdGVtLCB0aGF0IHBhcnRpY3VsYXIgcGhvdG9ncmFwaCB3YXMgY29uc2lkZXJlZCB0byBiZSBhIHBvb3IgcmVwcmVzZW50YXRpb24gb2YgdGhlIGl0ZW0pOwoyLiB3ZXJlIGluY29ycmVjdGx5IG5hbWVkIGJ5IHRoZSBtYWpvcml0eSBvZiBzdWJqZWN0cyAoaS5lLiBpZiB0aGUgcHJvcG9ydGlvbiBvZiBjb3JyZWN0IHJlc3BvbnNlcyBlcXVhbGxlZCDiiaQgNTAlLCBzaW5jZSBpdCB3YXMgZXNzZW50aWFsIGZvciB0aGUgcGhvdG9ncmFwaHMgdG8gZGVwaWN0IHRoZSBzYW1lIGNvbmNlcHRzIGFzIHRob3NlIGZvdW5kIGluIHRoZSBsaW5lIGRyYXdpbmdzIGFuZCB3b3JkIHN0aW11bGkpOwozLiBoYWQgcGFydGljdWxhcmx5IHBvb3IgbmFtaW5nIGFncmVlbWVudCAo4omkIDIwJSBzdWJqZWN0cyBuYW1lZCB0aGUgb2JqZWN0IHNpbWlsYXJseSkuIEl0ZW1zIG1heSBub3QgaGF2ZSBiZWVuIGZsYWdnZWQgYnkgdGhlIHNlY29uZCBjcml0ZXJpYSAoZS5nLiBpZiBpdCByZWNlaXZlZCA0IGRpZmZlcmVudCBuYW1lcywgZWFjaCB3aXRoIGEgMjUlIHJhdGlvKSwgYnV0IGNvdWxkIHN0aWxsIGJlIGNvbnNpZGVyZWQgcG9vciByZXByZXNlbnRhdGlvbnMgb2YgdGhlIGludGVuZGVkIGNvbmNlcHRzLgoKNTQgcGhvdG9ncmFwaHMgd2VyZSBmb3VuZCB0byBtZWV0IGF0IGxlYXN0IG9uZSBvZiB0aGUgYWJvdmUgY3JpdGVyaWEsIGFuZCB0aGVyZWZvcmUgZXhjbHVkZWQuIFJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVzZSBpdGVtcyB3ZXJlIGdyZXkgb3IgY29sb3VyLCBpdCB3YXMgYWxzbyBuZWNlc3NhcnkgdG8gcmVtb3ZlIGl0cyBncmV5IG9yIGNvbG91ciBwYXJ0bmVyIChzaW5jZSBib3RoIHZlcnNpb25zIHdlcmUgbmVlZGVkIHRvIG1ha2UgY29tcGFyaXNvbnMgYWNyb3NzIHJlY29nbml0aW9uIGV4cGVyaW1lbnRzKS4gVGh1cywgYSB0b3RhbCBvZiA2NCBpdGVtcyAoMzIgZ3JleSAvIDMyIGNvbG91cikgd2VyZSBleGNsdWRlZCBhdCB0aGlzIHN0YWdlIChtYW55IGl0ZW1zIGFscmVhZHkgaGFkIGJvdGggZ3JleSBhbmQgY29sb3VyIHZlcnNpb25zIGZsYWdnZWQgYnkgdGhlIG9yaWdpbmFsIGNyaXRlcmlhKS4gCgpOZXh0LCB0aGUgcHJvcG9ydGlvbiBvZiBjb3JyZWN0IHJlc3BvbnNlcyB3ZXJlIGNvbXBhcmVkIGJldHdlZW4gZ3JleSBhbmQgY29sb3VyIHBob3RvZ3JhcGhzIGluIG9yZGVyIHRvIGlkZW50aWZ5IGl0ZW1zIHNob3dpbmcgdGhlIGxvd2VzdCBkaWZmZXJlbmNlLiBJbiBvcmRlciB0byBtYW5pcHVsYXRlIGNvbG91ciBpbiBsYXRlciByZWNvZ25pdGlvbiBleHBlcmltZW50cywgaXQgd2FzIGltcG9ydGFudCB0byBzZWxlY3QgaXRlbXMgd2hlcmUgbmFtaW5nIHdhcyBjb25ncnVlbnQgYWNyb3NzIGNvbG91ci9ncmV5IGl0ZW1zOyBpbiBvdGhlciB3b3JkcywgaXQgd291bGQgYmUgZGlmZmljdWx0IHRvIGF0dHJpYnV0ZSBwYXJ0aWN1bGFyIHJlY29nbml0aW9uIHJlc3BvbnNlIHBhdHRlcm5zIHRvIHRoZSBhZGRpdGlvbiBvZiBjb2xvdXIgKGlmIGEgZGlmZmVyZW5jZSB3ZXJlIGZvdW5kKSB3aGVuIHRoZSBncmV5IHZlcnNpb24gY291bGQgbm90IGJlIGlkZW50aWZpZWQgKG9yIGVuY29kZWQpIHNpbWlsYXJseS4gVmFyaWF0aW9ucyBleGhpYml0aW5nIHRoZSBsZWFzdCBkaWZmZXJlbmNlIGJldHdlZW4gY29sb3VyIGFuZCBncmV5IGl0ZW1zIChmb3IgdGhlIHByb3BvcnRpb24gb2YgY29ycmVjdCByZXNwb25zZXMpIHdlcmUgdGFrZW4gZm9yd2FyZCwgd2hpbGUgdGhlIHJlc3Qgd2VyZSBleGNsdWRlZC4gSW4gYSBudW1iZXIgb2YgaW5zdGFuY2VzLCBtdWx0aXBsZSB2YXJpYXRpb25zIGZvciB0aGUgc2FtZSBvYmplY3QgaGFkIHRoZSBzYW1lICdkaWZmZXJlbmNlJyBzY29yZS4gRm9yIGV4YW1wbGUsIGFsbCB0aHJlZSB2YXJpYXRpb25zIG9mIHRoZSBpdGVtICJiYWxsb29uIiBleGhpYml0ZWQgcGVyZmVjdCBuYW1pbmcgYWdyZWVtZW50LCBpcnJlc3BlY3RpdmUgb2Ygd2hldGhlciB0aGV5IHdlcmUgcHJlc2VudGVkIGluIGNvbG91ciBvciBncmV5IChhbmQgdGh1cyAiYmFsbG9vbjEiLCAiYmFsbG9vbjIiLCBhbmQgImJhbGxvb24zIiBoYWQgYSBkaWZmZXJlbmNlIHNjb3JlIG9mIDApLiBGb3IgaXRlbXMgd2hlcmUgbW9yZSB0aGFuIDEgdmFyaWF0aW9uIHJlbWFpbmVkLCBtYW51YWwgcmFua2luZ3Mgd2VyZSBvYnRhaW5lZCBmcm9tIHR3byBvZiB0aGUgcmVzZWFyY2hlcnMgdG8gZGV0ZXJtaW5lIHdoaWNoIHZhcmlhdGlvbiBiZXN0IGRlcGljdGVkIHRoZSBpbnRlbmRlZCBjb25jZXB0LiBGb3IgZWFjaCBpdGVtLCB0aGUgcmVzZWFyY2hlcnMgaW5kZXBlbmRlbnRseSBzdHVkaWVkIHRoZSByZW1haW5pbmcgdmFyaWF0aW9ucyBhbmQgcHJvdmlkZWQgYSByYW5rIG9mIHdoaWNoIHRoZXkgdGhvdWdodCB3YXMgYmVzdCAoMSkgdG8gd29yc3QgKDIgb3IgMywgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgdmFyaWF0aW9ucyB0aGF0IHJlbWFpbmVkKS4gVGhlIHJhdGluZ3MgZnJvbSBib3RoIHJlc2VhcmNoZXJzIHdlcmUgY29sbGF0ZWQ7IGl0ZW1zIHdoZXJlIHRoZXJlIHdhcyBhZ3JlZW1lbnQgYXMgdG8gd2hpY2ggdmFyaWF0aW9uIGJlc3QgZGVwaWN0ZWQgdGhlIGludGVuZGVkIGNvbmNlcHQgd2VyZSBzZWxlY3RlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBmaW5hbCBzdGltdWxpIGxpc3QuIEZvciBhbGwgdGhlIGl0ZW1zIHdoZXJlIHRoZXJlIHdhcyBkaXNhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcmVzZWFyY2hlcnMgcmFua2luZ3MsIG9uZSBvZiB0aGUgdmFyaWF0aW9ucyB3YXMgc2ltcGx5IHNlbGVjdGVkIGF0IHJhbmRvbS4KCiMjIERpc2N1c3Npb24KIyMjICpUaGUgcm9sZSBvZiBjb2xvdXIqCkZvciBuYW1pbmcgcmVzcG9uc2VzIChhY2N1cmFjeSwgYWdyZWVtZW50IFsqSCpdLCBhbmQgUlRzKSwgbm8gZGlmZmVyZW5jZXMgd2VyZSBvYnNlcnZlZCBiZXR3ZWVuIHRoZSBncmV5IGFuZCBjb2xvdXIgcGhvdG9ncmFwaHMuIFN1Y2ggYSByZXN1bHQgd2FzIGV4cGVjdGVkIGZvciBhY2N1cmFjeSBhbmQgYWdyZWVtZW50IHNjb3JlczsgdGhlIGFkZGl0aW9uL2Fic2VuY2Ugb2YgY29sb3VyIHNob3VsZCBub3QgYWx0ZXIgaG93IHBhcnRpY2lwYW50cyBpZGVudGlmeSAoYW5kIHRodXMgbGFiZWwpIGl0ZW1zLCBleGNlcHQgaW4gcmFyZSBpbnN0YW5jZXMgd2hlcmVieSBhIGxhY2sgb2YgY29sb3VyIG1heSBsZWFkIHRvIHRoZSBtaXNpZGVudGlmaWNhdGlvbiBvZiBhbiBvYmplY3QgKGUuZy4gaW5jb3JyZWN0bHkgbGFiZWxsaW5nIGEgZ3JleXNjYWxlIHBob3RvZ3JhcGggb2YgYW4gb3JhbmdlIGFzICdncmFwZWZydWl0JykuIFRoZSBkYXRhIGluZGljYXRlcywgaG93ZXZlciwgdGhhdCB0aGlzIHdhcyBub3QgY29tbW9uLCB3aXRoIHRoZSBncmV5IHNldCBvZiBwaG90b2dyYXBocyBleGhpYml0aW5nIGVxdWFsbHkgaGlnaCBsZXZlbHMgb2YgbmFtaW5nIGFjY3VyYWN5IGFzIHRoZSBjb2xvdXIgcGhvdG9ncmFwaHMuIFRoZSBhYnNlbmNlIG9mIFJUIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlIGNvbG91ciBhbmQgZ3JleXNjYWxlIHNldHMgd2FzIG5vdCBleHBlY3RlZCBmb3IgbmFtaW5nIHJlc3BvbnNlcy4gSXQgaXMgcmVhc29uYWJsZSB0byBhc3N1bWUgdGhhdCBjb2xvdXIgcGhvdG9ncmFwaHMgLSB3aXRoIGFuIGFkZGl0aW9uYWwgbGF5ZXIgb2YgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBjb21wYXJlZCB0byBncmV5IGl0ZW1zIC0gd291bGQgYmUgaWRlbnRpZmllZCAoYW5kIHRoZXJlZm9yZSBuYW1lZCkgcXVpY2tlciB0aGFuIGdyZXkgcGhvdG9ncmFwaHMgKGUuZy4gYSBjb2xvdXIgcGhvdG9ncmFwaCBvZiBhbiBvcmFuZ2Ugc2hvdWxkIGF2b2lkIHRoZSBwb3RlbnRpYWwgYW1iaWd1aXR5IHRoYXQgbWlnaHQgYWNjb21wYW55IGEgZ3JleXNjYWxlIGRlcGljdGlvbiwgd2hpY2ggY291bGQgaW5pdGlhbGx5IGJlIGNvbmZ1c2VkIGZvciBhbm90aGVyIHR5cGUgb2YgZnJ1aXQpLiBJbmRlZWQsIEByb3NzaW9uMjAwNCBkZW1vbnN0cmF0ZWQgUlRzIGNvbnNpc3RlbnQgd2l0aCB0aGlzIGh5cG90aGVzZXMsIHdpdGggY29sb3VyIGRyYXdpbmdzIHNob3dpbmcgc2lnbmlmaWNhbnRseSBxdWlja2VyIFJUcyB0aGFuIGdyZXkgaXRlbXMuIFRoZSBsYWNrIG9mIGRpZmZlcmVuY2UgaW4gdGhlIGN1cnJlbnQgZGF0YSBjb3VsZCBiZSBhdHRyaWJ1dGFibGUgdG8gY2VpbGluZyBlZmZlY3RzLCB3aGVyZWJ5IGFsbCBwaG90b2dyYXBocyB3ZXJlIHN1ZmZpY2llbnRseSB1bmFtYmlndW91cywgYW5kIHdlcmUgcXVpY2tseSBpZGVudGlmaWVkIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVyIHRoZXkgd2VyZSBwcmVzZW50ZWQgaW4gZ3JleXNjYWxlIG9yIGNvbG91ci4gRXhhbWluYXRpb24gb2YgdGhlIG90aGVyIG5hbWluZyBkYXRhLCBzaG93aW5nIHNpbWlsYXJseSBoaWdoIGxldmVscyBvZiBhY2N1cmFjeSBhbmQgYWdyZWVtZW50IGFjcm9zcyBncmV5IGFuZCBjb2xvdXIsIHN1cHBvcnRzIHRoaXMgbm90aW9uLgoKU2NvcmVzIG9mIG1lbnRhbCBpbWFnZXJ5IGFncmVlbWVudCBwcm9kdWNlZCBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcgcmVzdWx0cyBiZXR3ZWVuIHRoZSBncmV5IGFuZCBjb2xvdXIgaXRlbXMuIApHcmV5IHBob3RvZ3JhcGhzIGV4aGliaXRlZCBhIHNpZ25pZmljYW50bHkgcG9vcmVyIG1hdGNoIHdpdGggc3ViamVjdHMgaW1hZ2luZWQgcHJlc2VudGF0aW9uIG9mIHRoZSBvYmplY3RzIHRoYW4gdGhlIGNvbG91ciBpdGVtcy4gQ29sb3VyIGRpZmZlcmVuY2VzIHdlcmUgbm90IG9ic2VydmVkIHByZXZpb3VzbHkgYmV0d2VlbiBkcmF3aW5ncyBbQHJvc3Npb24yMDA0XSwgYW5kIGNvbXBhcmluZyB0aGUgY3VycmVudCBkYXRhIHdpdGggdGhhdCBvYnRhaW5lZCBpbiBvdGhlciBzdHVkaWVzIChzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyX19jb2x2c2dyZXlub3Jtcy0tdGFibGVjYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKSBkZW1vbnN0cmF0ZXMgaG93IHRoZSBncmV5c2NhbGUgcGhvdG9ncmFwaHMgc2hvdyB1bmlxdWVseSBsb3dlciBtZW50YWwgaW1hZ2VyeSBhZ3JlZW1lbnQgc2NvcmVzIGNvbXBhcmVkIHdpdGggYW55IG9mIHRoZSBvdGhlciBzdGltdWxpIGZvcm1hdHMuIFRvIGltYWdpbmUgdGhlIG9iamVjdHMsIGl0IHNlZW1zIGxpa2VseSB0aGF0IHN1YmplY3RzIHdvdWxkIGNvbmp1cmUgYW4gaW1hZ2Ugb2YgaG93IHRoZXkgbmF0dXJhbGx5IHNlZSB0aGUgaXRlbSBpbiB0aGVpciBldmVyeWRheSBsaXZlcyAtIHdoaWNoIGZvciB0aGUgbWFqb3JpdHkgb2Ygc3ViamVjdHMsIHdvdWxkIHByZXN1bWFibHkgYmUgYSBjb2xvdXIgcmVwcmVzZW50YXRpb24uIFRoZXJlZm9yZSwgd2hlbiBwcmVzZW50ZWQgd2l0aCBncmV5c2NhbGUgZGVwaWN0aW9ucywgc3ViamVjdHMgbWF5IGhhdmUgYmVlbiBtb3JlIGluY2xpbmVkIHRvIHJlcG9ydCB0aGF0IHRoYXQgaXRlbSBkaWQgbm90IGFsaWduIHF1aXRlIGFzIHdlbGwgYXMgdGhvc2UgcHJlc2VudGVkIGluIGNvbG91ci4gSG93ZXZlciwgaXQgaXMgdW5jbGVhciB3aHkgYSBzaW1pbGFyIHBhdHRlcm4gaXMgbm90IGFsc28gZXZpZGVudCB3aGVuIGNvbXBhcmluZyBncmV5IGFuZCBjb2xvdXIgZHJhd2luZ3MgW0Byb3NzaW9uMjAwNF0uIEl0IG1heSBiZSB0aGF0IHBob3RvZ3JhcGhzIHByb21vdGUgc3RyaWN0ZXIgaW50ZXJuYWwgY3JpdGVyaWEgd2hlbiBzdWJqZWN0cyBtdXN0IGRlY2lkZSB3aGV0aGVyIGFuIGl0ZW0gaXMgYSBnb29kIG1hdGNoIHRvIHRoZWlyIG1lbnRhbCBpbWFnZS4gV2l0aCBsaW5lLWRyYXduIC8gaWxsdXN0cmF0ZWQgaXRlbXMsIHN1YmplY3RzIG1heSBzaW1wbHkgYWNjZXB0IHRoYXQgdGhlIGl0ZW1zIGFyZSBiYXNlbGluZSBkZXBpY3Rpb25zLCBhbmQgdGhhdCB0aGV5IHdpbGwgb25seSBhYmxlIHRvIG1hdGNoIHRoZWlyIHJlYWwtd29ybGQgbWVudGFsIGltYWdlcyB0byBhIGNlcnRhaW4gZGVncmVlIC0gdGh1cyBsZWFkaW5nIHRvIGEgZ2VuZXJhbGx5IG1vcmUgbGliZXJhbCByZXNwb25zZSBiaWFzIHRocm91Z2hvdXQuIFRoZSBhZGRpdGlvbiBvZiBjb2xvdXIgbWF5IHRoZXJlZm9yZSBkbyB2ZXJ5IGxpdHRsZSB0byBmdXJ0aGVyIHJlY29uY2lsZSB0aGUgbWF0Y2ggYmV0d2VlbiB0aGUgZHJhd2luZyBhbmQgcmVhbC13b3JsZCBtZW50YWwgcmVwcmVzZW50YXRpb24uIFdoZW4gc3ViamVjdHMgYXJlIHJlc3BvbmRpbmcgb25seSB0byBwaG90b2dyYXBocywgdGhlIGVjb2xvZ2ljYWwgbmF0dXJlIG9mIHRoZSBpdGVtcyBtYXkgZmFjaWxpdGF0ZSBkZWVwZXIgY3JpdGljYWwgZXZhbHVhdGlvbiBvZiB3aGV0aGVyIHRoZXkgb2ZmZXIgYSBnb29kIG1hdGNoIHRvIG1lbnRhbCBpbWFnZXMsIGFuZCB0aHVzIHByb21vdGUgYSBtb3JlIGNvbnNlcnZhdGl2ZSByZXNwb25zZSBiaWFzLiBDb2xvdXIgbWF5IHRoZXJlZm9yZSBiZSBhIGZhciBtb3JlIGltcG9ydGFudCBmYWN0b3IgaW4gcGhvdG9ncmFwaHMgdGhhbiBpdCBpcyBpbiBsaW5lIGRyYXdpbmdzIGZvciBhbGxvd2luZyBwYXJ0aWNpcGFudHMgdG8gZGVjaWRlIHdoZXRoZXIgYW4gaXRlbSBtYXRjaGVzIHdlbGwgd2l0aCB0aGVpciBtZW50YWwgaW1hZ2UuIAoKVGhlcmUgd2VyZSBubyBjb2xvdXIgZGlmZmVyZW5jZXMgaW4gZmFtaWxpYXJpdHkgc2NvcmVzLiBUaGlzIHJlc3VsdCB3YXMgZXhwZWN0ZWQgLSBwYXJ0aWNpcGFudHMgd2VyZSBhc2tlZCB0byByYXRlIHRoZSBkZWdyZWUgdG8gd2hpY2ggdGhleSBjYW1lIGluIGNvbnRhY3Qgd2l0aCwgb3IgdGhpbmsgYWJvdXQsIHRoZSBjb25jZXB0IGl0c2VsZiByYXRoZXIgdGhhbiB0aGUgcGFydGljdWxhciBkZXBpY3Rpb24gc2hvd24sIGFuZCB0aGVyZSBpcyBubyBhcHBhcmVudCByZWFzb24gd2h5IGNvbG91ciBzaG91bGQgaW5mbHVlbmNlIHN1Y2ggcmF0aW5ncy4gVmlzdWFsIGNvbXBsZXhpdHksIG9uIHRoZSBvdGhlciBoYW5kLCB3aGVyZSBwYXJ0aWNpcGFudHMgd2VyZSByZXF1aXJlZCB0byBkaXJlY3RseSByYXRlIHRoZSBhbW91bnQgb2YgZGV0YWlsIGluIHRoZSBwaWN0dXJlLCBkaWQgc2hvdyBhbiBleHBlY3RlZCBkaWZmZXJlbmNlLiBDb2xvdXIgcGhvdG9ncmFwaHMgd2VyZSByYXRlZCBhcyBzaWduaWZpY2FudGx5IG1vcmUgdmlzdWFsbHkgY29tcGxleCB0aGFuIGdyZXkgaXRlbXMsIHByZXN1bWFibHkgZHVlIHRvIHRoZWlyIGFkZGl0aW9uYWwgbGF5ZXIgb2YgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4gV2hlbiBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgZGF0YSBvYnRhaW5lZCBmb3IgZHJhd2luZ3MsIHRoZSBncmV5c2NhbGUgcGhvdG9ncmFwaHMgc2hvd2VkIGNvbXBhcmFibGUgbGV2ZWxzIG9mIHZpc3VhbCBjb21wbGV4aXR5LCB3aGlsZSB0aGUgY29sb3VyIHBob3RvZ3JhcGhzIHNob3dlZCBoaWdoZXIgbGV2ZWxzIHRoYW4gYW55IG9mIHRoZSBvdGhlciBmb3JtYXRzLiBJdCBpcyB1bmNsZWFyIHdoeSB0aGUgcGhvdG9ncmFwaHMgb2YgdGhlIGN1cnJlbnQgc3R1ZHkgc2hvd2VkIGNvbG91ciBkaWZmZXJlbmNlcywgd2hlbiBncmV5IGFuZCBjb2xvdXIgZHJhd2luZ3MgZGlkIG5vdCBkaWZmZXIsIHRob3VnaCBpdCBtYXkgdGllIGluIHdpdGggdGhlIGh5cG90aGVzZXMgcHJvcG9zZWQgdG8gZXhwbGFpbiB0aGUgbWVudGFsIGltYWdlcnkgYWdyZWVtZW50IGRhdGEuIFN1YmplY3RzIG1heSBhcHBseSBzdHJpY3RlciBpbnRlcm5hbCBjcml0ZXJpYSB3aGVuIHJhdGluZyBzdGltdWxpIHRoYXQgYXJlIHBlcmNlaXZlZCBhcyBiZWluZyBjbG9zZXIgdG8gaG93IHRoZXkgd291bGQgYmUgZXhwZXJpZW5jZWQgaW4gcmVhbCBsaWZlIC0gd2hlbiB2aWV3aW5nIGEgY29sb3VyIHBob3RvZ3JhcGggb2YgYSByYWJiaXQsIGl0IGlzIGRpZmZpY3VsdCB0byBzZWUgaG93IHdlIGNvdWxkIG1ha2UgdGhlIGl0ZW0gYW55IG1vcmUgdmlzdWFsbHkgY29tcGxleCB0aGFuIGl0IGFscmVhZHkgaXMgKGF0IGxlYXN0IGluIGEgMkQgbWVkaXVtKS4gSXQncyBwcm9iYWJsZSB0aGF0IHN1YmplY3RzIG5vdGljZSB0aGUgYWJzZW5jZSBvZiBjb2xvdXIgd2hlbiB2aWV3aW5nIHRoZSBncmV5c2NhbGUgaXRlbXMsIHNpbmNlIHRoZXkgZGVwaWN0IHRoZSBpdGVtcyBpbiBhIHdheSB0aGF0IHRoZXkgYXJlIG5vdCB1c3VhbGx5IHNlZW4sIGFuZCB0aHVzIGRldGVybWluZSB0aGF0IHRoZXNlIGl0ZW1zIGNvdWxkIGJlIG1hZGUgbW9yZSBjb21wbGV4IGlmIHRoZXkgd2VyZSBzaG93biBpbiBjb2xvdXIgKGFuZCBzbyBnaXZlIGxvd2VyIHZpc3VhbCBjb21wbGV4aXR5IHJhdGluZ3MgYXMgYSByZXN1bHQpLiAKCiMjIyAqRXN0YWJsaXNoaW5nIGEgbmV3IHNldCBvZiBzdGltdWxpKgpUaGUgb2JqZWN0aXZlIG9mIHRoZSBjdXJyZW50IHN0dWR5IHdhcyB0byBlc3RhYmxpc2ggYSBuZXcgc2V0IG9mIGVjb2xvZ2ljYWwgcGhvdG9ncmFwaCBzdGltdWxpIHRvIGJlIHRha2VuIGZvcndhcmQgaW50byBzdWJzZXF1ZW50IHJlY29nbml0aW9uIG1lbW9yeSBleHBlcmltZW50cy4gTWF0Y2hpbmcgaXRlbXMgd2l0aCBwcmV2aW91c2x5IGVzdGFibGlzaGVkIGRyYXdpbmdzIChhbmQgd29yZHMpIHdvdWxkIGFsbG93IGZvciB0aGUgZWZmZWN0cyBvZiBzdGltdWxpLWZvcm1hdCBvbiByZWNvZ25pdGlvbiByZXNwb25zZSBwYXR0ZXJucyB0byBiZSBkaXJlY3RseSBleGFtaW5lZC4gQSByYW5nZSBvZiBub3JtYXRpdmUgZGF0YSB3YXMgY29sbGVjdGVkIGZvciA4MTYgdW5pcXVlIHBob3RvZ3JhcGggaXRlbXMuIFRoZXNlIGl0ZW1zIG1heSBwcm92ZSB1c2VmdWwgZm9yIGEgcmFuZ2Ugb2YgY29nbml0aXZlIHJlc2VhcmNoZXJzIHRoYXQgd2lzaCB0byB1dGlsaXNlIGEgc2V0IG9mIGhpZ2ggcXVhbGl0eSBhbmQgcmVhbGlzdGljIG9iamVjdCBzdGltdWxpLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBmbGV4aWJpbGl0eSBvZiBpdGVtcyB0aGF0IGNhbiBiZSBmaWx0ZXJlZCBiYXNlZCBvbiBjb2xvdXIsIG5hbWluZyBhZ3JlZW1lbnQsIGZhbWlsaWFyaXR5LCBldGMuIEZvciB0aGUgbmVlZHMgb2YgdGhlIGN1cnJlbnQgYm9keSBvZiByZXNlYXJjaCwgdGhlIG5hbWluZyBkYXRhIHdhcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBwaG90b2dyYXBocyBiZXN0IG1hdGNoZWQgdGhlIGludGVuZGVkIGNvbmNlcHRzIGFtb25nIGEgbnVtYmVyIG9mIHBvc3NpYmxlIHZhcmlhdGlvbnMuIFRoaXMgYWxsb3dlZCBmb3IgdGhlIHN5c3RlbWF0aWMgY29tcGFyaXNvbiBvZiByZWNvZ25pdGlvbiBtZW1vcnkgcGVyZm9ybWFuY2UgdG93YXJkIHRocmVlIGRpc3RpbmN0IHN0aW11bGkgZm9ybWF0cyAod29yZHMsIGRyYXdpbmdzLCBhbmQgcGhvdG9ncmFwaHMpIGluIHRoZSBmb2xsb3dpbmcgc3R1ZHksIGluIGFuIGVmZm9ydCB0byBlc3RhYmxpc2ggaG93IHN0aW11bGkgb2YgdmFyeWluZyBwZXJjZXB0dWFsIGRpc3RpbmN0aXZlbmVzcyBtYXkgYWZmZWN0IHJlY29nbml0aW9uIHJlc3BvbnNlIHBhdHRlcm5zLiBTdWNoIGNvbXBhcmlzb25zIG1pZ2h0IGhlbHAgdG8gcmVjb25jaWxlIHRoZSBpbmNvbnNpc3RlbmNpZXMgcHJlc2VudCBhY3Jvc3MgcmVjb2duaXRpb24gbWVtb3J5IHJlc2VhcmNoLCBzdWNoIGFzIHRob3NlIGF0dGVtcHRlZCB0byBkZXRlcm1pbmUgd2hldGhlciBmYW1pbGlhcml0eSBwcm9jZXNzZXMgYXJlIHByZXNlcnZlZCBpbiB0aG9zZSB3aXRoIGFtbmVzdGljIE1pbGQgQ29nbml0aXZlIEltcGFpcm1lbnQgKGFNQ0kpLgoKIyBFeHBlcmltZW50IDMgKEdyZXkgZHJhd2luZ3MgKyBwaG90b3MpCiMjIEVmZmVjdCBvZiBzdGltdWxpIGZvcm1hdCBhbmQgcmVzcG9uc2Ugb3B0aW9uIG9uIHJlY29nbml0aW9uIG1lbW9yeSBqdWRnbWVudHMuCgpGb3IgdGhlIHJlY29nbml0aW9uIG1lbW9yeSBleHBlcmltZW50LCBldmVyeWRheSBvYmplY3RzIHdlcmUgcHJlc2VudGVkIGluIHRocmVlIHN0aW11bGkgZm9ybWF0czogaSkgd29yZHMgKHdyaXR0ZW4gaW4gc2ltcGxlLCBibGFjayBpbmspOyBpaSkgZHJhd2luZ3MgKHNoYWRlZCBsaW5lLWRyYXduIGlsbHVzdHJhdGlvbnMpOyBhbmQgaWlpKSBwaG90b2dyYXBocyAoZGV0YWlsIHJpY2ggZXhlbXBsYXJzIG9mIHRoZSByZWFsIHdvcmxkIG9iamVjdCkuIEByb3NzaW9uMjAwNCBkZW1vbnN0cmF0ZWQgdGhhdCBuYW1pbmcgYWdyZWVtZW50IGNvdWxkIGJlIGltcHJvdmVkIGJ5IGFkZGluZyBzdXJmYWNlIHRleHR1cmUgYW5kIHNoYWRpbmcgdG8gdGhlIG9yaWdpbmFsIEBzbm9kZ3Jhc3MxOTgwIGl0ZW1zOyBob3dldmVyLCBpdCBpcyB1bmNsZWFyIGhvdyBtYW5pcHVsYXRpb25zIHRvIGRpc3RpbmN0aXZlbmVzcyBhY3R1YWxseSBpbXBhY3QgcGVyZm9ybWFuY2UgaW4gcmVjb2duaXRpb24gbWVtb3J5IHBhcmFkaWdtcy4gQXMgd2VsbCBhcyBnZW5lcmFsIGluY29uc2lzdGVuY2llcyByZWdhcmRpbmcgdGhlIHR5cGUgb2Ygc3RpbXVsaSB1c2VkIGluIHJlY29nbml0aW9uIG1lbW9yeSBleHBlcmltZW50cywgdGhlcmUgaXMgYWxzbyBtdWNoIHZhcmlhYmlsaXR5IGluIHRoZSByZXNwb25zZSBvcHRpb25zIGF2YWlsYWJsZSB0byBwYXJ0aWNpcGFudHMgd2hlbiByZXBvcnRpbmcgdGhlaXIgcmVjb2duaXRpb24sIGZvciBleGFtcGxlOiBSZW1lbWJlci9Lbm93IChAbG9tYmFyZGkyMDE2KSwgUmVjb2xsZWN0aW9uL0ZhbWlsaWFyaXR5ICg/Pz8pLCBvciBMb3cvTWVkL0hpZ2ggY29uZmlkZW5jZSAoPz8/KS4gSW4gdGhlIGN1cnJlbnQgZXhwZXJpbWVudCwgdGhlIGF2YWlsYWJpbGl0eSBvZiBkaWZmZXJlbnQgcmVzcG9uc2Ugb3B0aW9ucyB3aGVuIHJlcG9ydGluZyByZWNvZ25pdGlvbiB3aWxsIGFsc28gYmUgZXhhbWluZWQgYnkgcmFuZG9tbHkgYXNzaWduaW5nIHBhcnRpY2lwYW50cyBpbnRvIGEgcGFyYWRpZ20gd2l0aCB0aHJlZSByZXNwb25zZSBvcHRpb25zIChSZWNvbGxlY3Rpb24gLyBGYW1pbGlhcml0eSAvIEd1ZXNzaW5nKSBvciBmb3VyIHJlc3BvbnNlIG9wdGlvbnMgKFJGRyArIEJvdGgpLiAKCkJhc2VkIG9uIHRoZSByZXN1bHRzIG9mIEV4cGVyaW1lbnQgMSwgd2hpY2ggY29tcGFyZWQgcmVjb2duaXRpb24gdG8gZm9yIHdvcmRzIGFuZCBkcmF3aW5ncyBvbmx5LCBhIG51bWJlciBvZiBoeXBvdGhlc2VzIGFyZSBwcm9wb3NlZCBhcyB0byB0aGUgcG90ZW50aWFsIGVmZmVjdHMgb2YgYWRkaW5nIGEgdGhpcmQgc3RpbXVsaSBmb3JtYXQgKGhpZ2hseSBkaXN0aW5jdGl2ZSBwaG90b2dyYXBoIHN0aW11bGkpLiBBcyBzdGltdWxpIGJlY29tZSBpbmNyZWFzaW5nbHkgZGlzdGluY3RpdmUgKGZyb20gd29yZHMsIHRvIGRyYXdpbmdzLCB0byBwaG90b2dyYXBocyksIGl0IHNlZW1zIGxpa2VseSB0aGF0IHRoZSBudW1iZXIgb2YgaGl0cyAoY29ycmVjdGx5IHJlY29nbmlzZWQgaXRlbXMpIHdpbGwgaW5jcmVhc2UsIGFuZCB0aGUgbnVtYmVyIG9mIGZhbHNlIGFsYXJtcyAoRkFzKSB3aWxsIGRlY3JlYXNlLiBSRkcgcmVzcG9uc2VzIGFyZSBleHBlY3RlZCB0byBzaG93IGEgc2ltaWxhciBwYXR0ZXJuLCB3aXRoIHRoZSBtb3N0IGRldGFpbGVkIHN0aW11bGkgc2hvd2luZyB0aGUgaGlnaGVzdCBudW1iZXIgb2YgaGl0cyBhc3NpZ25lZCAg4oCcUmVjb2xsZWN0aW9u4oCdLCB3aGlsZSB0aGUgbGVzcyBkZXRhaWxlZCBmb3JtYXRzIHNob3cgaW5jcmVhc2luZyBsZXZlbHMgb2YgIkZhbWlsaWFyaXR5IiBhbmQgIkd1ZXNzaW5nIiBoaXRzLiBXaGlsc3Qgd2UgZXhwZWN0IHRoZSBvdmVyYWxsIG51bWJlciBvZiBGQXMgdG8gaW5jcmVhc2UgYXMgc3RpbXVsaSBiZWNvbWUgbGVzcyBkaXN0aW5jdGl2ZSAoaS5lLiB3b3JkcyB3aWxsIHNob3cgdGhlIGhpZ2hlc3QgcmF0ZSBvZiBGQXMpLCB0aGVyZSBpcyBubyByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IHRoZXNlIEZBcyB3aWxsIGJlIGJpYXNlZCB0b3dhcmQgYW55IHBhcnRpY3VsYXIgUkZHIGp1ZGdlbWVudCBhY3Jvc3MgZm9ybWF0cy4gSXQgaXMgYWxzbyBoeXBvdGhlc2lzZWQgdGhhdCB0aGUgcmF0ZXMgb2YgcmVwb3J0ZWQgUmVjb2xsZWN0aW9uIGFuZCBGYW1pbGlhcml0eSB3aWxsIGRpZmZlciBhY3Jvc3MgcmVzcG9uc2Ugb3B0aW9uIGNvbmRpdGlvbnMgKFJGRyAvIFJGQkcpLCB0aG91Z2ggdGhlIGRpcmVjdGlvbiBvZiB0aGlzIGRpZmZlcmVuY2UgaXMgY3VycmVudGx5IHVuY2xlYXIuIAoKYGBge3IgZXhwZXJpbWVudC0zLW1haW4sIGluY2x1ZGU9RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGU9VFJVRX0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRVhQRVJJTUVOVCAzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIEltcG9ydCBkZW1vZ3JhcGhpY3MsIFJGRyBqdXN0aWZpY2F0aW9ucywgYW5kIFJGQkcganVzdGlmaWNhdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAKZXhwM2FuZDRfX3BfaW5mb19maWxlcyA8LQogICMjICBTT05BIC0gY29sb3VyICsgZ3JleSAodjEyMyk6CiAgYygiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfcXVlc3Rpb25uYWlyZS1ocTRyLmNzdiIsCiAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfcXVlc3Rpb25uYWlyZS1hYWoxLmNzdiIsCiAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfcXVlc3Rpb25uYWlyZS1uNm9lLmNzdiIsCiAgICAjIyAgUHJvbGlmaWMgLSBjb2xvdXIgKHYxMjcpOgogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3F1ZXN0aW9ubmFpcmUtaHE0ci5jc3YiLAogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3F1ZXN0aW9ubmFpcmUtYWFqMS5jc3YiLAogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3F1ZXN0aW9ubmFpcmUtbjZvZS5jc3YiLAogICAgIyMgIFByb2xpZmljIC0gY29sb3VyICh2MTI4KToKICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF9xdWVzdGlvbm5haXJlLWhxNHIuY3N2IiwKICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF9xdWVzdGlvbm5haXJlLWFhajEuY3N2IiwKICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF9xdWVzdGlvbm5haXJlLW42b2UuY3N2IiwKICAgICMjICBQcm9saWZpYyAtIGdyZXkgKHYxMzEpOgogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3F1ZXN0aW9ubmFpcmUtaHE0ci5jc3YiLAogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3F1ZXN0aW9ubmFpcmUtYWFqMS5jc3YiLAogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3F1ZXN0aW9ubmFpcmUtbjZvZS5jc3YiLAogICAgIyMgIEhhbm92ZXIgLSBncmV5ICh2NCk6CiAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzE5MTM0LXY0X3F1ZXN0aW9ubmFpcmUtaHE0ci5jc3YiLAogICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xOTEzNC12NF9xdWVzdGlvbm5haXJlLWFhajEuY3N2IiwKICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTkxMzQtdjRfcXVlc3Rpb25uYWlyZS1uNm9lLmNzdiIpCgojIyAgQ3JlYXRlIHJhdyBkZiBmcm9tIHRoZSBhYm92ZSBmaWxlcywgYnV0IG9ubHkgZ2V0IHRoZSBmb2xsb3dpbmcgY29sdW1uczoKZXhwM2FuZDRfX3BhcnRpY2lwYW50X2luZm8gPC0gbWFwX2RmcihleHAzYW5kNF9fcF9pbmZvX2ZpbGVzLH5yZWFkX2NzdigueCwgY29sX3R5cGVzID0gY29sc19vbmx5KCJQYXJ0aWNpcGFudCBQcml2YXRlIElEIj0nYycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQYXJ0aWNpcGFudCBQdWJsaWMgSUQiPSdjJywiVVRDIERhdGUiPSdjJywiUGFydGljaXBhbnQgT1MiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFydGljaXBhbnQgQnJvd3NlciI9J2MnLCJQYXJ0aWNpcGFudCBNb25pdG9yIFNpemUiPSdjJywicmFuZG9taXNlci1ocjJ4Ij0nYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhbmRvbWlzZXItcjdmYiI9J2MnLCJyYW5kb21pc2VyLWhyOW8iPSdjJywicmFuZG9taXNlci04bXlxIj0nYycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYW5kb21pc2VyLXVoZTQiPSdjJywicmFuZG9taXNlci16NW91Ij0nYycsInJhbmRvbWlzZXIta2RwbCI9J2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyYW5kb21pc2VyLWZzbHgiPSdjJywicmFuZG9taXNlci0xbHMyIj0nYycsImNoZWNrcG9pbnQtY2tzMiI9J2MnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2twb2ludC1scGVmIj0nYycsImNoZWNrcG9pbnQtbjhjcyI9J2MnLCJjaGVja3BvaW50LThwNnEiPSdjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2hlY2twb2ludC1qazZyIj0nYycsImNoZWNrcG9pbnQtajdmcSI9J2MnLCJjaGVja3BvaW50LW44Y3MiPSdjJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlF1ZXN0aW9uIEtleSI9J2MnLCJSZXNwb25zZSI9J2MnKSkpICU+JQogICMjICBNZXJnZSBjb2x1bW5zIHRoYXQgY29udGFpbiB0aGUgc2FtZSB0eXBlIG9mIGRhdGEsIGJ1dCB3ZXJlIG9yaWdpbmFsbHkgc3BsaXQgaW50byBkaWZmZXJlbnQgY29sdW1uczoKICB1bml0ZShzdHVkeV9saXN0LCAicmFuZG9taXNlci1yN2ZiIiwgInJhbmRvbWlzZXItaHI5byIsIHJlbW92ZSA9IFRSVUUsIG5hLnJtID0gVFJVRSkgJT4lCiAgdW5pdGUodGVzdF9saXN0LCAiY2hlY2twb2ludC1ja3MyIiwgImNoZWNrcG9pbnQtbHBlZiIsICJjaGVja3BvaW50LW44Y3MiLCAiY2hlY2twb2ludC04cDZxIiwKICAgICAgICAiY2hlY2twb2ludC1qazZyIiwgImNoZWNrcG9pbnQtajdmcSIsICJjaGVja3BvaW50LW44Y3MiLCByZW1vdmUgPSBUUlVFLAogICAgICAgIG5hLnJtID0gVFJVRSkgJT4lCiAgdW5pdGUocmVzcF9vcHRpb24sICJyYW5kb21pc2VyLWtkcGwiLCAicmFuZG9taXNlci04bXlxIiwgInJhbmRvbWlzZXItejVvdSIsICJyYW5kb21pc2VyLXVoZTQiLAogICAgICAgICJyYW5kb21pc2VyLWZzbHgiLCAicmFuZG9taXNlci0xbHMyIiwgcmVtb3ZlID0gVFJVRSwgbmEucm0gPSBUUlVFKSAlPiUKICAjIyAgUmVuYW1lIHNvbWUgY29sdW1uczogICAgCiAgcmVuYW1lKGlkID0gIlBhcnRpY2lwYW50IFByaXZhdGUgSUQiLCBwcm9saWZpY19pZCA9ICJQYXJ0aWNpcGFudCBQdWJsaWMgSUQiLCBkYXRlID0gIlVUQyBEYXRlIiwgCiAgICAgICAgIHN5c3RlbSA9ICJQYXJ0aWNpcGFudCBPUyIsIGJyb3dzZXIgPSAiUGFydGljaXBhbnQgQnJvd3NlciIsIG1vbml0b3IgPSAiUGFydGljaXBhbnQgTW9uaXRvciBTaXplIiwgCiAgICAgICAgIGNvbF9vcl9ncmV5ID0gInJhbmRvbWlzZXItaHIyeCIsIHF1ZXN0aW9uID0gIlF1ZXN0aW9uIEtleSIsIHJlc3BvbnNlID0gIlJlc3BvbnNlIikgJT4lICAgCiAgIyMgIFJlb3JkZXIgY29sdW1uczogICAgCiAgc2VsZWN0KGlkLCBwcm9saWZpY19pZCwgZGF0ZSwgc3lzdGVtLCBicm93c2VyLCBtb25pdG9yLCBjb2xfb3JfZ3JleSwgcmVzcF9vcHRpb24sIHN0dWR5X2xpc3QsIAogICAgICAgICB0ZXN0X2xpc3QsIHF1ZXN0aW9uLCByZXNwb25zZSkgJT4lCiAgIyMgIFNldCBwYXJ0aWNpcGFudCBJRCBhcyB0aGUgZ3JvdXBpbmcgdmFyaWFibGUsIGFuZCBhcnJhbmdlIGRhdGEgYnkgcGFydGljaXBhbnQgSUQ6CiAgZ3JvdXBfYnkoaWQpICU+JQogIGFycmFuZ2UoaWQpICU+JQogICMjICBSZW1vdmUgZW1wdHkgLyB1bmltcG9ydGFudCByb3dzOgogIGRyb3BfbmEoaWQpICU+JQogIGZpbHRlcihxdWVzdGlvbiAhPSAiQkVHSU4gUVVFU1RJT05OQUlSRSIpICU+JSAgICAKICBmaWx0ZXIocXVlc3Rpb24gIT0gIkVORCBRVUVTVElPTk5BSVJFIikgJT4lCiAgIyMgIFJlZm9ybWF0IGZyb20gbG9uZyB0byB3aWRlOgogIHNwcmVhZChrZXkgPSBxdWVzdGlvbiwgdmFsdWUgPSByZXNwb25zZSkgJT4lCiAgIyMgIFJlbW92ZSB1bmltcG9ydGFudCBjb2x1bW5zOiAgICAKICBzZWxlY3QoLSJhZ2UtcXVhbnRpc2VkIiwgLSJhdHRlbnRpb25fY2hlY2stcXVhbnRpc2VkIiwgLSJFbmdGaXJzdExhbmctcXVhbnRpc2VkIiwgLSJldGhuaWNpdHktcXVhbnRpc2VkIiwKICAgICAgICAgLSJldGhuaWNpdHkyLXF1YW50aXNlZCIsIC0iZXRobmljaXR5My1xdWFudGlzZWQiLCAtIm1lbV9za2lsbHNfMS1xdWFudGlzZWQiLAogICAgICAgICAtIm1lbV9za2lsbHNfMi1xdWFudGlzZWQiLCAtInJlc3BvbnNlLTYtcXVhbnRpc2VkIiwgLSJyZXNwb25zZS05LXF1YW50aXNlZCIpICU+JQogICMjICBNZXJnZSBtdWx0aXBsZSByb3dzIGludG8gb25lIChwZXIgcGFydGljaXBhbnQpOgogIHN1bW1hcmlzZV9hbGwoY29hbGVzY2VfYnlfY29sdW1uKSAlPiUKICAjIyAgUmVuYW1lIG1vcmUgY29sdW1uczoKICByZW5hbWUod2hpdGUgPSAiZXRobmljaXR5IiwgbWl4ZWQgPSAiZXRobmljaXR5MiIsIGFzaWFuID0gImV0aG5pY2l0eTMiLCBlbmdfZmlyc3RfbGFuZyA9ICJFbmdGaXJzdExhbmciLAogICAgICAgICBtaXhlZF9vdGhlciA9ICJyZXNwb25zZS00IiwgYXNpYW5fb3RoZXIgPSAicmVzcG9uc2UtMTUiLCBibGFjayA9ICJyZXNwb25zZS02IiwgCiAgICAgICAgIGJsYWNrX290aGVyID0gInJlc3BvbnNlLTciLCBvdGhlcl9ldGhuaWMgPSAicmVzcG9uc2UtOSIsIAogICAgICAgICBvdGhlcl9ldGhuaWNfc3BlY2lmaWVkID0gInJlc3BvbnNlLTQiKSAlPiUKICAjIyAgUmVvcmRlciBjb2x1bW5zIGFnYWluOiAgIAogIHNlbGVjdChpZCwgcHJvbGlmaWNfaWQsIGRhdGUsIHN5c3RlbSwgYnJvd3NlciwgbW9uaXRvciwgY29sX29yX2dyZXksIHJlc3Bfb3B0aW9uLCBzdHVkeV9saXN0LCB0ZXN0X2xpc3QsIAogICAgICAgICBhZ2UsIGdlbmRlciwgZW5nX2ZpcnN0X2xhbmcsIHdoaXRlLCB3aGl0ZV9vdGhlciwgbWl4ZWQsIG1peGVkX290aGVyLCBhc2lhbiwgYXNpYW5fb3RoZXIsIGJsYWNrLCAKICAgICAgICAgYmxhY2tfb3RoZXIsIG90aGVyX2V0aG5pYywgb3RoZXJfZXRobmljX3NwZWNpZmllZCwgcmVjX2p1c3RpZmljYXRpb24sIGZhbV9qdXN0aWZpY2F0aW9uLAogICAgICAgICBib3RoX2p1c3RpZmljYXRpb24sIGd1ZXNzX2p1c3RpZmljYXRpb24sIG1lbV9za2lsbHNfMSwgbWVtX3NraWxsc18yLCBhdHRlbnRpb25fY2hlY2spICU+JQogICMjICBSZWNvZGUgYXR0ZW50aW9uIGNoZWNrIHRvIHNob3cgcGFzcyBvciBmYWlsOgogIG11dGF0ZShhdHRlbnRpb25fY2hlY2sgPSBzdHJfcmVwbGFjZShhdHRlbnRpb25fY2hlY2ssICJhIGxvdCBiZXR0ZXIiLCAicGFzcyIpKSAlPiUKICBtdXRhdGUoYXR0ZW50aW9uX2NoZWNrID0gc3RyX3JlcGxhY2VfYWxsKGF0dGVudGlvbl9jaGVjaywgYygiYSBsb3Qgd29yc2UiID0gImZhaWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBsaXR0bGUgd29yc2UiID0gImZhaWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGhlIHNhbWUiID0gImZhaWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYSBsaXR0bGUgYmV0dGVyIiA9ICJmYWlsIikpKSAlPiUKICAjIyAgVGlkeSB1cCByZXNwb25zZXMgZm9yIGNsYXJpdHk6CiAgbXV0YXRlX2FsbCguLCB0b2xvd2VyKSAlPiUKICBtdXRhdGUoY29sX29yX2dyZXkgPSBzdHJfcmVtb3ZlX2FsbChjb2xfb3JfZ3JleSwgIl4oLio/KV9fIikpICU+JQogIG11dGF0ZShyZXNwX29wdGlvbiA9IHN0cl9yZW1vdmVfYWxsKHJlc3Bfb3B0aW9uLCAiXiguKj8pXyIpKSAlPiUKICBtdXRhdGUoc3R1ZHlfbGlzdCA9IHN0cl9yZW1vdmVfYWxsKHN0dWR5X2xpc3QsICJbXjAtOV0rIikpICU+JQogIG11dGF0ZSh0ZXN0X2xpc3QgPSBzdHJfcmVtb3ZlX2FsbCh0ZXN0X2xpc3QsICJcXF8uKyIpKSAlPiUKICBtdXRhdGUoc3lzdGVtID0gc3RyX3JlbW92ZV9hbGwoc3lzdGVtLCAiXFwgLisiKSkgJT4lCiAgbXV0YXRlKGJyb3dzZXIgPSBzdHJfcmVtb3ZlX2FsbChicm93c2VyLCAiXFwgLisiKSkgJT4lCiAgbXV0YXRlKG1peGVkID0gc3RyX3JlbW92ZV9hbGwobWl4ZWQsICJcXCAuKyIpKSAlPiUKICBtdXRhdGUoYXNpYW4gPSBzdHJfcmVtb3ZlX2FsbChhc2lhbiwgIlxcIC4rIikpICU+JQogIG11dGF0ZShibGFjayA9IHN0cl9yZW1vdmVfYWxsKGJsYWNrLCAiXFwgLisiKSkgJT4lCiAgbXV0YXRlKGdlbmRlciA9IHN0cl9yZXBsYWNlKGdlbmRlciwgIl5mJCIsICJmZW1hbGUiKSkgJT4lCiAgbXV0YXRlKGdlbmRlciA9IHN0cl9yZXBsYWNlKGdlbmRlciwgImZlbWxlIiwgImZlbWFsZSIpKSAlPiUKICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAiZmVtYWwiLCAiZmVtYWxlIikpICU+JQogIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJmZW1hbGVlIiwgImZlbWFsZSIpKSAlPiUKICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAid29tYW4iLCAiZmVtYWxlIikpICU+JQogIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJebSQiLCAibWFsZSIpKSAlPiUKICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAibWFsdyIsICJtYWxlIikpICU+JQogIG11dGF0ZShnZW5kZXIgPSBzdHJfcmVwbGFjZShnZW5kZXIsICJtbGUiLCAibWFsZSIpKSAlPiUKICBtdXRhdGUoZ2VuZGVyID0gc3RyX3JlcGxhY2UoZ2VuZGVyLCAiXlswLTldKiQiLCAidW5zcGVjaWZpZWQiKSkgJT4lCiAgbXV0YXRlKGdlbmRlciA9IHJlcGxhY2VfbmEoZ2VuZGVyLCAidW5zcGVjaWZpZWQiKSkgJT4lCiAgYXJyYW5nZShjb2xfb3JfZ3JleSwgZGVzYyhyZXNwX29wdGlvbiksIHN0dWR5X2xpc3QsIHRlc3RfbGlzdCkKCiMjICBDYWxjdWxhdGUgaG93IG1hbnkgaXRlbXMgUCBnb3QgY29ycmVjdCBkdXJpbmcgc3R1ZHk6CiMjICBJbXBvcnQgc3R1ZHkgZGF0YToKIyMgIFNPTkEgLSBjb2xvdXIgKyBncmV5ICh2MTIzKToKZXhwM2FuZDRfX3N0dWR5X2ZpbGVzIDwtIGMoIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2staHFpaC5jc3YiLCAjIFN0dWR5XzFfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyM190YXNrLWl3bzEuY3N2IiwgIyBTdHVkeV8yX0dyZXkKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay16ZGU1LmNzdiIsICMgU3R1ZHlfM19HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stZ2I3Mi5jc3YiLCAjIFN0dWR5XzRfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyM190YXNrLTZ4aDEuY3N2IiwgIyBTdHVkeV81X0dyZXkKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay02dDZjLmNzdiIsICMgU3R1ZHlfNl9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2staGp2cy5jc3YiLCAjIFN0dWR5XzFfQ29sCiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2staWpzYy5jc3YiLCAjIFN0dWR5XzJfQ29sCiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stcnhxOC5jc3YiLCAjIFN0dWR5XzNfQ29sCiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stNDF1Ni5jc3YiLCAjIFN0dWR5XzRfQ29sCiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2steGZibi5jc3YiLCAjIFN0dWR5XzVfQ29sCiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stcXc3ZC5jc3YiLCAjIFN0dWR5XzZfQ29sCiAgICAgICAgICAgICAgICAgIyMgIFByb2xpZmljIC0gY29sb3VyICh2MTI3KToKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjdfdGFzay1oanZzLmNzdiIsICMgU3R1ZHlfMV9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3Rhc2staWpzYy5jc3YiLCAjIFN0dWR5XzJfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyN190YXNrLXJ4cTguY3N2IiwgIyBTdHVkeV8zX0dyZXkKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjdfdGFzay00MXU2LmNzdiIsICMgU3R1ZHlfNF9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3Rhc2steGZibi5jc3YiLCAjIFN0dWR5XzVfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyN190YXNrLXF3N2QuY3N2IiwgIyBTdHVkeV82X0dyZXkKICAgICAgICAgICAgICAgICAjIyAgUHJvbGlmaWMgLSBjb2xvdXIgKHYxMjgpOgogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLWhqdnMuY3N2IiwgIyBTdHVkeV8xX0NvbAogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLWlqc2MuY3N2IiwgIyBTdHVkeV8yX0NvbAogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLXJ4cTguY3N2IiwgIyBTdHVkeV8zX0NvbAogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLTQxdTYuY3N2IiwgIyBTdHVkeV80X0NvbAogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLXhmYm4uY3N2IiwgIyBTdHVkeV81X0NvbAogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLXF3N2QuY3N2IiwgIyBTdHVkeV82X0NvbAogICAgICAgICAgICAgICAgICMjICBQcm9saWZpYyAtIGdyZXkgKHYxMzEpOgogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEzMV90YXNrLWhxaWguY3N2IiwgIyBTdHVkeV8xX0dyZXkKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMzFfdGFzay1pd28xLmNzdiIsICMgU3R1ZHlfMl9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3Rhc2stemRlNS5jc3YiLCAjIFN0dWR5XzNfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEzMV90YXNrLWdiNzIuY3N2IiwgIyBTdHVkeV80X0dyZXkKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMzFfdGFzay02eGgxLmNzdiIsICMgU3R1ZHlfNV9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3Rhc2stNnQ2Yy5jc3YiLCAjIFN0dWR5XzZfR3JleSAKICAgICAgICAgICAgICAgICAjIyAgSGFub3ZlciAtIGdyZXkgKHY0KToKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzE5MTM0LXY0X3Rhc2staHFpaC5jc3YiLCAgICMgU3R1ZHlfMV9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xOTEzNC12NF90YXNrLWl3bzEuY3N2IiwgICAjIFN0dWR5XzJfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTkxMzQtdjRfdGFzay16ZGU1LmNzdiIsICAgIyBTdHVkeV8zX0dyZXkKICAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzE5MTM0LXY0X3Rhc2stZ2I3Mi5jc3YiLCAgICMgU3R1ZHlfNF9HcmV5CiAgICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xOTEzNC12NF90YXNrLTZ4aDEuY3N2IiwgICAjIFN0dWR5XzVfR3JleQogICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTkxMzQtdjRfdGFzay02dDZjLmNzdiIpICAgIyBTdHVkeV82X0dyZXkKCiMjICBDcmVhdGUgcmF3IGRmIGZyb20gdGhlIGFib3ZlIGZpbGVzLCBidXQgb25seSBnZXQgdGhlIGZvbGxvd2luZyBjb2x1bW5zOgpleHAzYW5kNF9fc3R1ZHlfZGF0YSA8LSBtYXBfZGZyKGV4cDNhbmQ0X19zdHVkeV9maWxlcyx+cmVhZF9jc3YoLngsIGNvbF90eXBlcyA9IGNvbHNfb25seSgiUGFydGljaXBhbnQgUHJpdmF0ZSBJRCIgPSAnYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFydGljaXBhbnQgUHVibGljIElEIj0nYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXhwZXJpbWVudCBWZXJzaW9uIiA9ICdjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTY3JlZW4gTmFtZSIgPSAnYycsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0aW0iID0gJ2MnLCAiY29ycmVjdF9hbnN3ZXIiID0gJ2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlc3BvbnNlIiA9ICdjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZWFjdGlvbiBUaW1lIiA9IGNvbF9kb3VibGUoKSkpKSAlPiUKICAjIyAgUmVuYW1lIHNvbWUgY29sdW1uczoKICByZW5hbWUoaWQgPSAiUGFydGljaXBhbnQgUHJpdmF0ZSBJRCIsIHByb2xpZmljX2lkID0gIlBhcnRpY2lwYW50IFB1YmxpYyBJRCIsIAogICAgICAgICBleHBfdmVyID0gIkV4cGVyaW1lbnQgVmVyc2lvbiIsc2NyZWVuID0gIlNjcmVlbiBOYW1lIiwgcnQgPSAiUmVhY3Rpb24gVGltZSIsIAogICAgICAgICByZXNwb25zZSA9ICJSZXNwb25zZSIpICU+JQogICMjICBSZW9yZGVyIGNvbHVtbnM6ICAgIAogIHNlbGVjdChpZCwgcHJvbGlmaWNfaWQsIGV4cF92ZXIsIHNjcmVlbiwgc3RpbSwgY29ycmVjdF9hbnN3ZXIsIHJlc3BvbnNlLCBydCkgJT4lCiAgIyMgIFNldCBwYXJ0aWNpcGFudCBJRCBhcyB0aGUgZ3JvdXBpbmcgdmFyaWFibGUsIGFuZCBhcnJhbmdlIGRhdGEgYnkgcGFydGljaXBhbnQgSUQ6CiAgZ3JvdXBfYnkoaWQpICU+JQogIGFycmFuZ2UoaWQpICU+JSAgCiAgIyMgIFJlbW92ZSBlbXB0eSAvIHVuaW1wb3J0YW50IHJvd3M6CiAgZHJvcF9uYShzY3JlZW4pICU+JQogIGZpbHRlcihzY3JlZW4gIT0gImNoZWNrIikgJT4lCiAgZmlsdGVyKHNjcmVlbiAhPSAiZml4YXRpb24iKSAlPiUKICBmaWx0ZXIoc2NyZWVuICE9ICJmaWxsZXJfc3RhcnRfZml4YXRpb24iKSAlPiUKICBmaWx0ZXIoc2NyZWVuICE9ICJmaWxsZXJfc3RhcnRfc3RpbSIpICU+JQogIGZpbHRlcihzY3JlZW4gIT0gImZpbGxlcl9lbmRfZml4YXRpb24iKSAlPiUKICBmaWx0ZXIoc2NyZWVuICE9ICJmaWxsZXJfZW5kX3N0aW0iKSAlPiUKICBhZGRfY291bnQoc2NyZWVuLCBuYW1lID0gInRvdGFsX3Jlc3AiKQojIyAgQ2FsY3VsYXRlIGhvdyBtYW55IHJlc3BvbnNlcyB3ZXJlIGNvcnJlY3QgZm9yIGVhY2ggc3RpbXVsaSBmb3JtYXQsIHRoZW4gam9pbiB0aGVzZSB0b2dldGhlcjoKZXhwM2FuZDRfX3dvcmQgPC0gZXhwM2FuZDRfX3N0dWR5X2RhdGEgJT4lCiAgZmlsdGVyKGNvcnJlY3RfYW5zd2VyID09ICJ3b3JkLnBuZyIpICU+JQogIGFkZF9jb3VudChzY3JlZW4sIG5hbWUgPSAic3R1ZHlfd29yZF9yZXNwcyIpICU+JQogIGZpbHRlcihyZXNwb25zZSA9PSAid29yZC5wbmciKSAlPiUKICBhZGRfY291bnQoc2NyZWVuLCBuYW1lID0gInN0dWR5X3dvcmRfY29ycmVjdCIpICU+JQogIGRpc3RpbmN0KGlkLCAua2VlcF9hbGwgPSBUUlVFKSAlPiUKICBzZWxlY3QoaWQsIGV4cF92ZXIsIHN0dWR5X3dvcmRfcmVzcHMsIHN0dWR5X3dvcmRfY29ycmVjdCkKZXhwM2FuZDRfX2RyYXdpbmcgPC0gZXhwM2FuZDRfX3N0dWR5X2RhdGEgJT4lCiAgZmlsdGVyKGNvcnJlY3RfYW5zd2VyID09ICJsaW5lLWRyYXdpbmcucG5nIikgJT4lCiAgYWRkX2NvdW50KHNjcmVlbiwgbmFtZSA9ICJzdHVkeV9kcmF3aW5nX3Jlc3BzIikgJT4lCiAgZmlsdGVyKHJlc3BvbnNlID09ICJsaW5lLWRyYXdpbmcucG5nIikgJT4lCiAgYWRkX2NvdW50KHNjcmVlbiwgbmFtZSA9ICJzdHVkeV9kcmF3aW5nX2NvcnJlY3QiKSAlPiUKICBkaXN0aW5jdChpZCwgLmtlZXBfYWxsID0gVFJVRSkgJT4lCiAgc2VsZWN0KGlkLCBleHBfdmVyLCBzdHVkeV9kcmF3aW5nX3Jlc3BzLCBzdHVkeV9kcmF3aW5nX2NvcnJlY3QpCmV4cDNhbmQ0X19waG90byA8LSBleHAzYW5kNF9fc3R1ZHlfZGF0YSAlPiUKICBmaWx0ZXIoY29ycmVjdF9hbnN3ZXIgPT0gInBob3RvZ3JhcGgucG5nIikgJT4lCiAgYWRkX2NvdW50KHNjcmVlbiwgbmFtZSA9ICJzdHVkeV9waG90b19yZXNwcyIpICU+JQogIGZpbHRlcihyZXNwb25zZSA9PSAicGhvdG9ncmFwaC5wbmciKSAlPiUKICBhZGRfY291bnQoc2NyZWVuLCBuYW1lID0gInN0dWR5X3Bob3RvX2NvcnJlY3QiKSAlPiUKICBkaXN0aW5jdChpZCwgLmtlZXBfYWxsID0gVFJVRSkgJT4lCiAgc2VsZWN0KGlkLCBleHBfdmVyLCBzdHVkeV9waG90b19yZXNwcywgc3R1ZHlfcGhvdG9fY29ycmVjdCkKZXhwM2FuZDRfX3N0dWR5X3RvdGFscyA8LSByaWdodF9qb2luKGV4cDNhbmQ0X193b3JkLCBleHAzYW5kNF9fZHJhd2luZywgYnkgPSAiaWQiKSAlPiUKICByaWdodF9qb2luKGV4cDNhbmQ0X19waG90bywgYnkgPSAiaWQiKQojIyAgQWRkICdleHAzYW5kNF9fc3R1ZHlfdG90YWxzJyB0byAnZXhwM2FuZDRfX3BhcnRpY2lwYW50X2luZm8nIGRmOgpleHAzYW5kNF9fcGFydGljaXBhbnRfaW5mbyA8LSBleHAzYW5kNF9fcGFydGljaXBhbnRfaW5mbyAlPiUKICByaWdodF9qb2luKGV4cDNhbmQ0X19zdHVkeV90b3RhbHMsIGJ5ID0gImlkIikgJT4lCiAgbXV0YXRlKHN0dWR5X3Jlc3BvbnNlc190b3RhbCA9IHN0dWR5X3dvcmRfcmVzcHMgKyBzdHVkeV9kcmF3aW5nX3Jlc3BzICsgc3R1ZHlfcGhvdG9fcmVzcHMpICU+JQogIG11dGF0ZShzdHVkeV9jb3JyZWN0ID0gc3R1ZHlfd29yZF9jb3JyZWN0ICsgc3R1ZHlfZHJhd2luZ19jb3JyZWN0ICsgc3R1ZHlfcGhvdG9fY29ycmVjdCkgJT4lCiAgbXV0YXRlKHN0dWR5X2NvcnJlY3RfcGVyY2VudCA9IHN0dWR5X2NvcnJlY3QqKDEwMC9zdHVkeV9yZXNwb25zZXNfdG90YWwpKSAlPiUKICBtdXRhdGUoc3R1ZHlfZXJyb3IgPSBzdHVkeV9yZXNwb25zZXNfdG90YWwgLSBzdHVkeV9jb3JyZWN0KSAlPiUKICBtdXRhdGUoc3R1ZHlfZXJyb3JfcGVyY2VudCA9IHN0dWR5X2Vycm9yKigxMDAvc3R1ZHlfcmVzcG9uc2VzX3RvdGFsKSkgJT4lCiAgYXJyYW5nZShjb2xfb3JfZ3JleSwgZGVzYyhyZXNwX29wdGlvbiksIHN0dWR5X2xpc3QsIHRlc3RfbGlzdCkgJT4lCiAgbXV0YXRlKGNvbF9vcl9ncmV5ID0gc3RyX3JlcGxhY2UoY29sX29yX2dyZXksICJncmV5c2NhbGUiLCAiZ3JleSIpKSAlPiUKICBtdXRhdGUoY29sX29yX2dyZXkgPSBzdHJfcmVwbGFjZShjb2xfb3JfZ3JleSwgImNvbG91ciIsICJjb2wiKSkgJT4lCiAgc2VsZWN0KC1leHBfdmVyLngsIC1leHBfdmVyLnkpICU+JQogIHNlbGVjdChpZCwgcHJvbGlmaWNfaWQsIGV4cF92ZXIsIGV2ZXJ5dGhpbmcoKSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRGVmaW5lIHN0dWR5IGxpc3RzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIERlZmluZSBhbGwgcG9zc2libGUgc3R1ZHkgbGlzdHMsIHNvIHdlIGNhbiBsYXRlciBjYWxjdWxhdGUgSGl0cywgTWlzc2VzLCBGQSwgQ1JzLiAgCmV4cDNhbmQ0X19zdHVkeV8xX2dyZXlfbGlzdCA8LSBjKCJncmV5X3Bob3RvX2FzaHRyYXkzIiwiZ3JleV9waG90b19iYWxsb29uMyIsImdyZXlfcGhvdG9fYmFycmVsMyIsImdyZXlfcGhvdG9fYmVhcjIiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2Jvd2wyIiwiZ3JleV9waG90b19icnVzaDIiLCJncmV5X3Bob3RvX2NhbWVsMyIsImdyZXlfcGhvdG9fY2xvY2szIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19kZWVyMiIsImdyZXlfcGhvdG9fZG9vcjMiLCJncmV5X3Bob3RvX2RydW0xIiwiZ3JleV9waG90b19mZW5jZTMiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX25haWwzIiwiZ3JleV9waG90b19uZWVkbGUzIiwiZ3JleV9waG90b19ub3NlMyIsImdyZXlfcGhvdG9fcGVhcjEiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX3BsaWVyczIiLCJncmV5X3Bob3RvX3JhYmJpdDMiLCJncmV5X3Bob3RvX3NrdW5rMiIsImdyZXlfcGhvdG9fdGFibGUyIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b193YXRjaDEiLCJ3b3JkX2JhbmFuYSIsIndvcmRfYm9vdCIsIndvcmRfY2VsZXJ5Iiwid29yZF9jaGFpciIsIndvcmRfY2xvdWQiLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX2xhZGRlciIsIndvcmRfbGlwcyIsIndvcmRfcGVhY2giLCJ3b3JkX3BlYWNvY2siLCJ3b3JkX3BlbmNpbCIsIndvcmRfcGVwcGVyIiwKICAgICAgICAgICAgICAgICAgICAgICAid29yZF9waWFubyIsIndvcmRfcGlwZSIsIndvcmRfcHVtcGtpbiIsIndvcmRfcmluZyIsIndvcmRfc2VhbCIsIndvcmRfc2hlZXAiLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX3NuYWlsIiwid29yZF9zcGlkZXIiLCJ3b3JkX3RpZ2VyIiwid29yZF90cmFpbiIsImdyZXlfZHJhd2luZ19iYXNrZXQiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfYm9vayIsImdyZXlfZHJhd2luZ19ib3R0bGUiLCJncmV5X2RyYXdpbmdfYnJvb20iLCJncmV5X2RyYXdpbmdfY2hlcnJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2NoaWNrZW4iLCJncmV5X2RyYXdpbmdfY29tYiIsImdyZXlfZHJhd2luZ19lYWdsZSIsImdyZXlfZHJhd2luZ19mbHV0ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19nb2F0IiwiZ3JleV9kcmF3aW5nX2lyb24iLCJncmV5X2RyYXdpbmdfbW9vbiIsImdyZXlfZHJhd2luZ19tb3VzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19vc3RyaWNoIiwiZ3JleV9kcmF3aW5nX3NvY2tzIiwiZ3JleV9kcmF3aW5nX3N0b29sIiwiZ3JleV9kcmF3aW5nX3RodW1iIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX3RvYXN0ZXIiLCJncmV5X2RyYXdpbmdfdHJlZSIsImdyZXlfZHJhd2luZ192aW9saW4iLCJncmV5X2RyYXdpbmdfd2VsbCIpCgpleHAzYW5kNF9fc3R1ZHlfMl9ncmV5X2xpc3QgPC0gYygid29yZF9hc2h0cmF5Iiwid29yZF9iYWxsb29uIiwid29yZF9iYXJyZWwiLCJ3b3JkX2JlYXIiLCJ3b3JkX2Jvd2wiLCJ3b3JkX2JydXNoIiwKICAgICAgICAgICAgICAgICAgICAgICAid29yZF9jYW1lbCIsIndvcmRfY2xvY2siLCJ3b3JkX2RlZXIiLCJ3b3JkX2Rvb3IiLCJ3b3JkX2RydW0iLCJ3b3JkX2ZlbmNlIiwKICAgICAgICAgICAgICAgICAgICAgICAid29yZF9uYWlsIiwid29yZF9uZWVkbGUiLCJ3b3JkX25vc2UiLCJ3b3JkX3BlYXIiLCJ3b3JkX3BsaWVycyIsIndvcmRfcmFiYml0IiwKICAgICAgICAgICAgICAgICAgICAgICAid29yZF9za3VuayIsIndvcmRfdGFibGUiLCJ3b3JkX3dhdGNoIiwiZ3JleV9kcmF3aW5nX2JhbmFuYSIsImdyZXlfZHJhd2luZ19ib290IiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2NlbGVyeSIsImdyZXlfZHJhd2luZ19jaGFpciIsImdyZXlfZHJhd2luZ19jbG91ZCIsImdyZXlfZHJhd2luZ19sYWRkZXIiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfbGlwcyIsImdyZXlfZHJhd2luZ19wZWFjaCIsImdyZXlfZHJhd2luZ19wZWFjb2NrIiwiZ3JleV9kcmF3aW5nX3BlbmNpbCIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19wZXBwZXIiLCJncmV5X2RyYXdpbmdfcGlhbm8iLCJncmV5X2RyYXdpbmdfcGlwZSIsImdyZXlfZHJhd2luZ19wdW1wa2luIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX3JpbmciLCJncmV5X2RyYXdpbmdfc2VhbCIsImdyZXlfZHJhd2luZ19zaGVlcCIsImdyZXlfZHJhd2luZ19zbmFpbCIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19zcGlkZXIiLCJncmV5X2RyYXdpbmdfdGlnZXIiLCJncmV5X2RyYXdpbmdfdHJhaW4iLCJncmV5X3Bob3RvX2Jhc2tldDIiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2Jvb2sxIiwiZ3JleV9waG90b19ib3R0bGUyIiwiZ3JleV9waG90b19icm9vbTIiLCJncmV5X3Bob3RvX2NoZXJyeTEiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2NoaWNrZW4yIiwiZ3JleV9waG90b19jb21iMiIsImdyZXlfcGhvdG9fZWFnbGUxIiwiZ3JleV9waG90b19mbHV0ZTEiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2dvYXQyIiwiZ3JleV9waG90b19pcm9uMiIsImdyZXlfcGhvdG9fbW9vbjMiLCJncmV5X3Bob3RvX21vdXNlMiIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fb3N0cmljaDMiLCJncmV5X3Bob3RvX3NvY2tzMSIsImdyZXlfcGhvdG9fc3Rvb2wyIiwiZ3JleV9waG90b190aHVtYjEiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX3RvYXN0ZXIxIiwiZ3JleV9waG90b190cmVlMSIsImdyZXlfcGhvdG9fdmlvbGluMSIsImdyZXlfcGhvdG9fd2VsbDIiKQoKZXhwM2FuZDRfX3N0dWR5XzNfZ3JleV9saXN0IDwtIGMoImdyZXlfZHJhd2luZ19hc2h0cmF5IiwiZ3JleV9kcmF3aW5nX2JhbGxvb24iLCJncmV5X2RyYXdpbmdfYmFycmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2JlYXIiLCJncmV5X2RyYXdpbmdfYm93bCIsImdyZXlfZHJhd2luZ19icnVzaCIsImdyZXlfZHJhd2luZ19jYW1lbCIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19jbG9jayIsImdyZXlfZHJhd2luZ19kZWVyIiwiZ3JleV9kcmF3aW5nX2Rvb3IiLCJncmV5X2RyYXdpbmdfZHJ1bSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19mZW5jZSIsImdyZXlfZHJhd2luZ19uYWlsIiwiZ3JleV9kcmF3aW5nX25lZWRsZSIsImdyZXlfZHJhd2luZ19ub3NlIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX3BlYXIiLCJncmV5X2RyYXdpbmdfcGxpZXJzIiwiZ3JleV9kcmF3aW5nX3JhYmJpdCIsImdyZXlfZHJhd2luZ19za3VuayIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ190YWJsZSIsImdyZXlfZHJhd2luZ193YXRjaCIsImdyZXlfcGhvdG9fYmFuYW5hMSIsImdyZXlfcGhvdG9fYm9vdDMiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2NlbGVyeTEiLCJncmV5X3Bob3RvX2NoYWlyMyIsImdyZXlfcGhvdG9fY2xvdWQyIiwiZ3JleV9waG90b19sYWRkZXIyIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19saXBzMiIsImdyZXlfcGhvdG9fcGVhY2gxIiwiZ3JleV9waG90b19wZWFjb2NrMyIsImdyZXlfcGhvdG9fcGVuY2lsMSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fcGVwcGVyMiIsImdyZXlfcGhvdG9fcGlhbm8zIiwiZ3JleV9waG90b19waXBlMSIsImdyZXlfcGhvdG9fcHVtcGtpbjMiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX3JpbmcxIiwiZ3JleV9waG90b19zZWFsMiIsImdyZXlfcGhvdG9fc2hlZXAxIiwiZ3JleV9waG90b19zbmFpbDMiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX3NwaWRlcjMiLCJncmV5X3Bob3RvX3RpZ2VyMiIsImdyZXlfcGhvdG9fdHJhaW4xIiwid29yZF9iYXNrZXQiLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX2Jvb2siLCJ3b3JkX2JvdHRsZSIsIndvcmRfYnJvb20iLCJ3b3JkX2NoZXJyeSIsIndvcmRfY2hpY2tlbiIsIndvcmRfY29tYiIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfZWFnbGUiLCJ3b3JkX2ZsdXRlIiwid29yZF9nb2F0Iiwid29yZF9pcm9uIiwid29yZF9tb29uIiwid29yZF9tb3VzZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfb3N0cmljaCIsIndvcmRfc29ja3MiLCJ3b3JkX3N0b29sIiwid29yZF90aHVtYiIsIndvcmRfdG9hc3RlciIsIndvcmRfdHJlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfdmlvbGluIiwid29yZF93ZWxsIikKCmV4cDNhbmQ0X19zdHVkeV80X2dyZXlfbGlzdCA8LSBjKCJncmV5X3Bob3RvX2FuY2hvcjMiLCJncmV5X3Bob3RvX2FwcGxlMyIsImdyZXlfcGhvdG9fYmVsbDEiLCJncmV5X3Bob3RvX2JyZWFkMSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fYnV0dG9uMyIsImdyZXlfcGhvdG9fY2Fycm90MyIsImdyZXlfcGhvdG9fY2hhaW4xIiwiZ3JleV9waG90b19jb3JuMSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fY3Jvd24yIiwiZ3JleV9waG90b19maXNoMiIsImdyZXlfcGhvdG9fZ2xhc3NlczEiLCJncmV5X3Bob3RvX2hhbW1lcjIiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2hvcnNlMyIsImdyZXlfcGhvdG9faG91c2UzIiwiZ3JleV9waG90b19qYWNrZXQyIiwiZ3JleV9waG90b19saW9uMiIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fb3JhbmdlMiIsImdyZXlfcGhvdG9fcmFjY29vbjIiLCJncmV5X3Bob3RvX3N3aW5nMiIsImdyZXlfcGhvdG9fdGhpbWJsZTEiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX3plYnJhMyIsIndvcmRfZG9sbCIsIndvcmRfZm9vdCIsIndvcmRfZnJvZyIsIndvcmRfaGFuZCIsIndvcmRfa2V0dGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAid29yZF9raXRlIiwid29yZF9rbmlmZSIsIndvcmRfbGVtb24iLCJ3b3JkX2xvYnN0ZXIiLCJ3b3JkX2xvY2siLCJ3b3JkX3Blbmd1aW4iLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX3BsdWciLCJ3b3JkX3BvdGF0byIsIndvcmRfc2hpcnQiLCJ3b3JkX3Nob2UiLCJ3b3JkX3NraXJ0Iiwid29yZF9zbmFrZSIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfc25vd21hbiIsIndvcmRfc3Bvb24iLCJ3b3JkX3RvbWF0byIsIndvcmRfdHJ1bXBldCIsImdyZXlfZHJhd2luZ19iZWx0IiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2Nha2UiLCJncmV5X2RyYXdpbmdfY2FuZGxlIiwiZ3JleV9kcmF3aW5nX2Nhbm5vbiIsImdyZXlfZHJhd2luZ19kdWNrIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2ZsYWciLCJncmV5X2RyYXdpbmdfZmxvd2VyIiwiZ3JleV9kcmF3aW5nX2dpcmFmZmUiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfZ3JhcGVzIiwiZ3JleV9kcmF3aW5nX2d1aXRhciIsImdyZXlfZHJhd2luZ19oYXJwIiwiZ3JleV9kcmF3aW5nX2xhbXAiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfbGVhZiIsImdyZXlfZHJhd2luZ19taXR0ZW4iLCJncmV5X2RyYXdpbmdfbW9ua2V5IiwiZ3JleV9kcmF3aW5nX29uaW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX3BlYW51dCIsImdyZXlfZHJhd2luZ19zY3JldyIsImdyZXlfZHJhd2luZ19zd2FuIiwiZ3JleV9kcmF3aW5nX3doaXN0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfd2luZG93IikKCmV4cDNhbmQ0X19zdHVkeV81X2dyZXlfbGlzdCA8LSBjKCJ3b3JkX2FuY2hvciIsIndvcmRfYXBwbGUiLCJ3b3JkX2JlbGwiLCJ3b3JkX2JyZWFkIiwid29yZF9idXR0b24iLCJ3b3JkX2NhcnJvdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfY2hhaW4iLCJ3b3JkX2Nvcm4iLCJ3b3JkX2Nyb3duIiwid29yZF9maXNoIiwid29yZF9nbGFzc2VzIiwid29yZF9oYW1tZXIiLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX2hvcnNlIiwid29yZF9ob3VzZSIsIndvcmRfamFja2V0Iiwid29yZF9saW9uIiwid29yZF9vcmFuZ2UiLCJ3b3JkX3JhY2Nvb24iLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX3N3aW5nIiwid29yZF90aGltYmxlIiwid29yZF96ZWJyYSIsImdyZXlfZHJhd2luZ19kb2xsIiwiZ3JleV9kcmF3aW5nX2Zvb3QiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfZnJvZyIsImdyZXlfZHJhd2luZ19oYW5kIiwiZ3JleV9kcmF3aW5nX2tldHRsZSIsImdyZXlfZHJhd2luZ19raXRlIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2tuaWZlIiwiZ3JleV9kcmF3aW5nX2xlbW9uIiwiZ3JleV9kcmF3aW5nX2xvYnN0ZXIiLCJncmV5X2RyYXdpbmdfbG9jayIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19wZW5ndWluIiwiZ3JleV9kcmF3aW5nX3BsdWciLCJncmV5X2RyYXdpbmdfcG90YXRvIiwiZ3JleV9kcmF3aW5nX3NoaXJ0IiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX3Nob2UiLCJncmV5X2RyYXdpbmdfc2tpcnQiLCJncmV5X2RyYXdpbmdfc25ha2UiLCJncmV5X2RyYXdpbmdfc25vd21hbiIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfZHJhd2luZ19zcG9vbiIsImdyZXlfZHJhd2luZ190b21hdG8iLCJncmV5X2RyYXdpbmdfdHJ1bXBldCIsImdyZXlfcGhvdG9fYmVsdDIiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX2Nha2UzIiwiZ3JleV9waG90b19jYW5kbGUyIiwiZ3JleV9waG90b19jYW5ub24yIiwiZ3JleV9waG90b19kdWNrMiIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fZmxhZzMiLCJncmV5X3Bob3RvX2Zsb3dlcjMiLCJncmV5X3Bob3RvX2dpcmFmZmUxIiwiZ3JleV9waG90b19ncmFwZXMxIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19ndWl0YXIxIiwiZ3JleV9waG90b19oYXJwMiIsImdyZXlfcGhvdG9fbGFtcDIiLCJncmV5X3Bob3RvX2xlYWYyIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19taXR0ZW4yIiwiZ3JleV9waG90b19tb25rZXkxIiwiZ3JleV9waG90b19vbmlvbjEiLCJncmV5X3Bob3RvX3BlYW51dDMiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X3Bob3RvX3NjcmV3MyIsImdyZXlfcGhvdG9fc3dhbjMiLCJncmV5X3Bob3RvX3doaXN0bGUxIiwiZ3JleV9waG90b193aW5kb3czIikKCmV4cDNhbmQ0X19zdHVkeV82X2dyZXlfbGlzdCA8LSBjKCJncmV5X2RyYXdpbmdfYW5jaG9yIiwiZ3JleV9kcmF3aW5nX2FwcGxlIiwiZ3JleV9kcmF3aW5nX2JlbGwiLCJncmV5X2RyYXdpbmdfYnJlYWQiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfYnV0dG9uIiwiZ3JleV9kcmF3aW5nX2NhcnJvdCIsImdyZXlfZHJhd2luZ19jaGFpbiIsImdyZXlfZHJhd2luZ19jb3JuIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX2Nyb3duIiwiZ3JleV9kcmF3aW5nX2Zpc2giLCJncmV5X2RyYXdpbmdfZ2xhc3NlcyIsImdyZXlfZHJhd2luZ19oYW1tZXIiLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfaG9yc2UiLCJncmV5X2RyYXdpbmdfaG91c2UiLCJncmV5X2RyYXdpbmdfamFja2V0IiwiZ3JleV9kcmF3aW5nX2xpb24iLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfb3JhbmdlIiwiZ3JleV9kcmF3aW5nX3JhY2Nvb24iLCJncmV5X2RyYXdpbmdfc3dpbmciLAogICAgICAgICAgICAgICAgICAgICAgICJncmV5X2RyYXdpbmdfdGhpbWJsZSIsImdyZXlfZHJhd2luZ196ZWJyYSIsImdyZXlfcGhvdG9fZG9sbDEiLCJncmV5X3Bob3RvX2Zvb3QxIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19mcm9nMiIsImdyZXlfcGhvdG9faGFuZDEiLCJncmV5X3Bob3RvX2tldHRsZTIiLCJncmV5X3Bob3RvX2tpdGUxIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19rbmlmZTIiLCJncmV5X3Bob3RvX2xlbW9uMyIsImdyZXlfcGhvdG9fbG9ic3RlcjIiLCJncmV5X3Bob3RvX2xvY2szIiwKICAgICAgICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19wZW5ndWluMSIsImdyZXlfcGhvdG9fcGx1ZzIiLCJncmV5X3Bob3RvX3BvdGF0bzEiLCJncmV5X3Bob3RvX3NoaXJ0MSIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fc2hvZTEiLCJncmV5X3Bob3RvX3NraXJ0MyIsImdyZXlfcGhvdG9fc25ha2UzIiwiZ3JleV9waG90b19zbm93bWFuMyIsCiAgICAgICAgICAgICAgICAgICAgICAgImdyZXlfcGhvdG9fc3Bvb24yIiwiZ3JleV9waG90b190b21hdG8xIiwiZ3JleV9waG90b190cnVtcGV0MyIsIndvcmRfYmVsdCIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfY2FrZSIsIndvcmRfY2FuZGxlIiwid29yZF9jYW5ub24iLCJ3b3JkX2R1Y2siLCJ3b3JkX2ZsYWciLCJ3b3JkX2Zsb3dlciIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfZ2lyYWZmZSIsIndvcmRfZ3JhcGVzIiwid29yZF9ndWl0YXIiLCJ3b3JkX2hhcnAiLCJ3b3JkX2xhbXAiLCJ3b3JkX2xlYWYiLAogICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX21pdHRlbiIsIndvcmRfbW9ua2V5Iiwid29yZF9vbmlvbiIsIndvcmRfcGVhbnV0Iiwid29yZF9zY3JldyIsIndvcmRfc3dhbiIsCiAgICAgICAgICAgICAgICAgICAgICAgIndvcmRfd2hpc3RsZSIsIndvcmRfd2luZG93IikgICAgCgpleHAzYW5kNF9fc3R1ZHlfMV9jb2xfbGlzdCA8LSBjKCJjb2xfcGhvdG9fYXNodHJheTMiLCJjb2xfcGhvdG9fYmFsbG9vbjMiLCJjb2xfcGhvdG9fYmFycmVsMyIsImNvbF9waG90b19iZWFyMiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX2Jvd2wyIiwiY29sX3Bob3RvX2JydXNoMiIsImNvbF9waG90b19jYW1lbDMiLCJjb2xfcGhvdG9fY2xvY2szIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fZGVlcjIiLCJjb2xfcGhvdG9fZG9vcjMiLCJjb2xfcGhvdG9fZHJ1bTEiLCJjb2xfcGhvdG9fZmVuY2UzIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fbmFpbDMiLCJjb2xfcGhvdG9fbmVlZGxlMyIsImNvbF9waG90b19ub3NlMyIsImNvbF9waG90b19wZWFyMSIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX3BsaWVyczIiLCJjb2xfcGhvdG9fcmFiYml0MyIsImNvbF9waG90b19za3VuazIiLCJjb2xfcGhvdG9fdGFibGUyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fd2F0Y2gxIiwid29yZF9iYW5hbmEiLCJ3b3JkX2Jvb3QiLCJ3b3JkX2NlbGVyeSIsIndvcmRfY2hhaXIiLCJ3b3JkX2Nsb3VkIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX2xhZGRlciIsIndvcmRfbGlwcyIsIndvcmRfcGVhY2giLCJ3b3JkX3BlYWNvY2siLCJ3b3JkX3BlbmNpbCIsIndvcmRfcGVwcGVyIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX3BpYW5vIiwid29yZF9waXBlIiwid29yZF9wdW1wa2luIiwid29yZF9yaW5nIiwid29yZF9zZWFsIiwid29yZF9zaGVlcCIsCiAgICAgICAgICAgICAgICAgICAgICAid29yZF9zbmFpbCIsIndvcmRfc3BpZGVyIiwid29yZF90aWdlciIsIndvcmRfdHJhaW4iLCJjb2xfZHJhd2luZ19iYXNrZXQiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX2Jvb2siLCJjb2xfZHJhd2luZ19ib3R0bGUiLCJjb2xfZHJhd2luZ19icm9vbSIsImNvbF9kcmF3aW5nX2NoZXJyeSIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfY2hpY2tlbiIsImNvbF9kcmF3aW5nX2NvbWIiLCJjb2xfZHJhd2luZ19lYWdsZSIsImNvbF9kcmF3aW5nX2ZsdXRlIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19nb2F0IiwiY29sX2RyYXdpbmdfaXJvbiIsImNvbF9kcmF3aW5nX21vb24iLCJjb2xfZHJhd2luZ19tb3VzZSIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfb3N0cmljaCIsImNvbF9kcmF3aW5nX3NvY2tzIiwiY29sX2RyYXdpbmdfc3Rvb2wiLCJjb2xfZHJhd2luZ190aHVtYiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfdG9hc3RlciIsImNvbF9kcmF3aW5nX3RyZWUiLCJjb2xfZHJhd2luZ192aW9saW4iLCJjb2xfZHJhd2luZ193ZWxsIikKCmV4cDNhbmQ0X19zdHVkeV8yX2NvbF9saXN0IDwtIGMoIndvcmRfYXNodHJheSIsIndvcmRfYmFsbG9vbiIsIndvcmRfYmFycmVsIiwid29yZF9iZWFyIiwid29yZF9ib3dsIiwid29yZF9icnVzaCIsCiAgICAgICAgICAgICAgICAgICAgICAid29yZF9jYW1lbCIsIndvcmRfY2xvY2siLCJ3b3JkX2RlZXIiLCJ3b3JkX2Rvb3IiLCJ3b3JkX2RydW0iLCJ3b3JkX2ZlbmNlIiwid29yZF9uYWlsIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX25lZWRsZSIsIndvcmRfbm9zZSIsIndvcmRfcGVhciIsIndvcmRfcGxpZXJzIiwid29yZF9yYWJiaXQiLCJ3b3JkX3NrdW5rIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX3RhYmxlIiwid29yZF93YXRjaCIsImNvbF9kcmF3aW5nX2JhbmFuYSIsImNvbF9kcmF3aW5nX2Jvb3QiLCJjb2xfZHJhd2luZ19jZWxlcnkiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX2NoYWlyIiwiY29sX2RyYXdpbmdfY2xvdWQiLCJjb2xfZHJhd2luZ19sYWRkZXIiLCJjb2xfZHJhd2luZ19saXBzIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19wZWFjaCIsImNvbF9kcmF3aW5nX3BlYWNvY2siLCJjb2xfZHJhd2luZ19wZW5jaWwiLCJjb2xfZHJhd2luZ19wZXBwZXIiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX3BpYW5vIiwiY29sX2RyYXdpbmdfcGlwZSIsImNvbF9kcmF3aW5nX3B1bXBraW4iLCJjb2xfZHJhd2luZ19yaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19zZWFsIiwiY29sX2RyYXdpbmdfc2hlZXAiLCJjb2xfZHJhd2luZ19zbmFpbCIsImNvbF9kcmF3aW5nX3NwaWRlciIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfdGlnZXIiLCJjb2xfZHJhd2luZ190cmFpbiIsImNvbF9waG90b19iYXNrZXQyIiwiY29sX3Bob3RvX2Jvb2sxIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fYm90dGxlMiIsImNvbF9waG90b19icm9vbTIiLCJjb2xfcGhvdG9fY2hlcnJ5MSIsImNvbF9waG90b19jaGlja2VuMiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX2NvbWIyIiwiY29sX3Bob3RvX2VhZ2xlMSIsImNvbF9waG90b19mbHV0ZTEiLCJjb2xfcGhvdG9fZ29hdDIiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9waG90b19pcm9uMiIsImNvbF9waG90b19tb29uMyIsImNvbF9waG90b19tb3VzZTIiLCJjb2xfcGhvdG9fb3N0cmljaDMiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9waG90b19zb2NrczEiLCJjb2xfcGhvdG9fc3Rvb2wyIiwiY29sX3Bob3RvX3RodW1iMSIsImNvbF9waG90b190b2FzdGVyMSIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX3RyZWUxIiwiY29sX3Bob3RvX3Zpb2xpbjEiLCJjb2xfcGhvdG9fd2VsbDIiKQoKZXhwM2FuZDRfX3N0dWR5XzNfY29sX2xpc3QgPC0gYygiY29sX2RyYXdpbmdfYXNodHJheSIsImNvbF9kcmF3aW5nX2JhbGxvb24iLCJjb2xfZHJhd2luZ19iYXJyZWwiLCJjb2xfZHJhd2luZ19iZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19ib3dsIiwiY29sX2RyYXdpbmdfYnJ1c2giLCJjb2xfZHJhd2luZ19jYW1lbCIsImNvbF9kcmF3aW5nX2Nsb2NrIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19kZWVyIiwiY29sX2RyYXdpbmdfZG9vciIsImNvbF9kcmF3aW5nX2RydW0iLCJjb2xfZHJhd2luZ19mZW5jZSIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfbmFpbCIsImNvbF9kcmF3aW5nX25lZWRsZSIsImNvbF9kcmF3aW5nX25vc2UiLCJjb2xfZHJhd2luZ19wZWFyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19wbGllcnMiLCJjb2xfZHJhd2luZ19yYWJiaXQiLCJjb2xfZHJhd2luZ19za3VuayIsImNvbF9kcmF3aW5nX3RhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ193YXRjaCIsImNvbF9waG90b19iYW5hbmExIiwiY29sX3Bob3RvX2Jvb3QzIiwiY29sX3Bob3RvX2NlbGVyeTEiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9waG90b19jaGFpcjMiLCJjb2xfcGhvdG9fY2xvdWQyIiwiY29sX3Bob3RvX2xhZGRlcjIiLCJjb2xfcGhvdG9fbGlwczIiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9waG90b19wZWFjaDEiLCJjb2xfcGhvdG9fcGVhY29jazMiLCJjb2xfcGhvdG9fcGVuY2lsMSIsImNvbF9waG90b19wZXBwZXIyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fcGlhbm8zIiwiY29sX3Bob3RvX3BpcGUxIiwiY29sX3Bob3RvX3B1bXBraW4zIiwiY29sX3Bob3RvX3JpbmcxIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fc2VhbDIiLCJjb2xfcGhvdG9fc2hlZXAxIiwiY29sX3Bob3RvX3NuYWlsMyIsImNvbF9waG90b19zcGlkZXIzIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fdGlnZXIyIiwiY29sX3Bob3RvX3RyYWluMSIsIndvcmRfYmFza2V0Iiwid29yZF9ib29rIiwid29yZF9ib3R0bGUiLAogICAgICAgICAgICAgICAgICAgICAgIndvcmRfYnJvb20iLCJ3b3JkX2NoZXJyeSIsIndvcmRfY2hpY2tlbiIsIndvcmRfY29tYiIsIndvcmRfZWFnbGUiLCJ3b3JkX2ZsdXRlIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX2dvYXQiLCJ3b3JkX2lyb24iLCJ3b3JkX21vb24iLCJ3b3JkX21vdXNlIiwid29yZF9vc3RyaWNoIiwid29yZF9zb2NrcyIsCiAgICAgICAgICAgICAgICAgICAgICAid29yZF9zdG9vbCIsIndvcmRfdGh1bWIiLCJ3b3JkX3RvYXN0ZXIiLCJ3b3JkX3RyZWUiLCJ3b3JkX3Zpb2xpbiIsIndvcmRfd2VsbCIpCgpleHAzYW5kNF9fc3R1ZHlfNF9jb2xfbGlzdCA8LSBjKCJjb2xfcGhvdG9fYW5jaG9yMyIsImNvbF9waG90b19hcHBsZTMiLCJjb2xfcGhvdG9fYmVsbDEiLCJjb2xfcGhvdG9fYnJlYWQxIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fYnV0dG9uMyIsImNvbF9waG90b19jYXJyb3QzIiwiY29sX3Bob3RvX2NoYWluMSIsImNvbF9waG90b19jb3JuMSIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX2Nyb3duMiIsImNvbF9waG90b19maXNoMiIsImNvbF9waG90b19nbGFzc2VzMSIsImNvbF9waG90b19oYW1tZXIyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9faG9yc2UzIiwiY29sX3Bob3RvX2hvdXNlMyIsImNvbF9waG90b19qYWNrZXQyIiwiY29sX3Bob3RvX2xpb24yIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fb3JhbmdlMiIsImNvbF9waG90b19yYWNjb29uMiIsImNvbF9waG90b19zd2luZzIiLCJjb2xfcGhvdG9fdGhpbWJsZTEiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9waG90b196ZWJyYTMiLCJ3b3JkX2RvbGwiLCJ3b3JkX2Zvb3QiLCJ3b3JkX2Zyb2ciLCJ3b3JkX2hhbmQiLCJ3b3JkX2tldHRsZSIsCiAgICAgICAgICAgICAgICAgICAgICAid29yZF9raXRlIiwid29yZF9rbmlmZSIsIndvcmRfbGVtb24iLCJ3b3JkX2xvYnN0ZXIiLCJ3b3JkX2xvY2siLCJ3b3JkX3Blbmd1aW4iLAogICAgICAgICAgICAgICAgICAgICAgIndvcmRfcGx1ZyIsIndvcmRfcG90YXRvIiwid29yZF9zaGlydCIsIndvcmRfc2hvZSIsIndvcmRfc2tpcnQiLCJ3b3JkX3NuYWtlIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX3Nub3dtYW4iLCJ3b3JkX3Nwb29uIiwid29yZF90b21hdG8iLCJ3b3JkX3RydW1wZXQiLCJjb2xfZHJhd2luZ19iZWx0IiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19jYWtlIiwiY29sX2RyYXdpbmdfY2FuZGxlIiwiY29sX2RyYXdpbmdfY2Fubm9uIiwiY29sX2RyYXdpbmdfZHVjayIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfZmxhZyIsImNvbF9kcmF3aW5nX2Zsb3dlciIsImNvbF9kcmF3aW5nX2dpcmFmZmUiLCJjb2xfZHJhd2luZ19ncmFwZXMiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX2d1aXRhciIsImNvbF9kcmF3aW5nX2hhcnAiLCJjb2xfZHJhd2luZ19sYW1wIiwiY29sX2RyYXdpbmdfbGVhZiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfbWl0dGVuIiwiY29sX2RyYXdpbmdfbW9ua2V5IiwiY29sX2RyYXdpbmdfb25pb24iLCJjb2xfZHJhd2luZ19wZWFudXQiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX3NjcmV3IiwiY29sX2RyYXdpbmdfc3dhbiIsImNvbF9kcmF3aW5nX3doaXN0bGUiLCJjb2xfZHJhd2luZ193aW5kb3ciKQoKZXhwM2FuZDRfX3N0dWR5XzVfY29sX2xpc3QgPC0gYygid29yZF9hbmNob3IiLCJ3b3JkX2FwcGxlIiwid29yZF9iZWxsIiwid29yZF9icmVhZCIsIndvcmRfYnV0dG9uIiwid29yZF9jYXJyb3QiLAogICAgICAgICAgICAgICAgICAgICAgIndvcmRfY2hhaW4iLCJ3b3JkX2Nvcm4iLCJ3b3JkX2Nyb3duIiwid29yZF9maXNoIiwid29yZF9nbGFzc2VzIiwid29yZF9oYW1tZXIiLAogICAgICAgICAgICAgICAgICAgICAgIndvcmRfaG9yc2UiLCJ3b3JkX2hvdXNlIiwid29yZF9qYWNrZXQiLCJ3b3JkX2xpb24iLCJ3b3JkX29yYW5nZSIsIndvcmRfcmFjY29vbiIsCiAgICAgICAgICAgICAgICAgICAgICAid29yZF9zd2luZyIsIndvcmRfdGhpbWJsZSIsIndvcmRfemVicmEiLCJjb2xfZHJhd2luZ19kb2xsIiwiY29sX2RyYXdpbmdfZm9vdCIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfZnJvZyIsImNvbF9kcmF3aW5nX2hhbmQiLCJjb2xfZHJhd2luZ19rZXR0bGUiLCJjb2xfZHJhd2luZ19raXRlIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19rbmlmZSIsImNvbF9kcmF3aW5nX2xlbW9uIiwiY29sX2RyYXdpbmdfbG9ic3RlciIsImNvbF9kcmF3aW5nX2xvY2siLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX3Blbmd1aW4iLCJjb2xfZHJhd2luZ19wbHVnIiwiY29sX2RyYXdpbmdfcG90YXRvIiwiY29sX2RyYXdpbmdfc2hpcnQiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX3Nob2UiLCJjb2xfZHJhd2luZ19za2lydCIsImNvbF9kcmF3aW5nX3NuYWtlIiwiY29sX2RyYXdpbmdfc25vd21hbiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX2RyYXdpbmdfc3Bvb24iLCJjb2xfZHJhd2luZ190b21hdG8iLCJjb2xfZHJhd2luZ190cnVtcGV0IiwiY29sX3Bob3RvX2JlbHQyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fY2FrZTMiLCJjb2xfcGhvdG9fY2FuZGxlMiIsImNvbF9waG90b19jYW5ub24yIiwiY29sX3Bob3RvX2R1Y2syIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fZmxhZzMiLCJjb2xfcGhvdG9fZmxvd2VyMyIsImNvbF9waG90b19naXJhZmZlMSIsImNvbF9waG90b19ncmFwZXMxIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fZ3VpdGFyMSIsImNvbF9waG90b19oYXJwMiIsImNvbF9waG90b19sYW1wMiIsImNvbF9waG90b19sZWFmMiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX21pdHRlbjIiLCJjb2xfcGhvdG9fbW9ua2V5MSIsImNvbF9waG90b19vbmlvbjEiLCJjb2xfcGhvdG9fcGVhbnV0MyIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX3NjcmV3MyIsImNvbF9waG90b19zd2FuMyIsImNvbF9waG90b193aGlzdGxlMSIsImNvbF9waG90b193aW5kb3czIikKCmV4cDNhbmQ0X19zdHVkeV82X2NvbF9saXN0IDwtIGMoImNvbF9kcmF3aW5nX2FuY2hvciIsImNvbF9kcmF3aW5nX2FwcGxlIiwiY29sX2RyYXdpbmdfYmVsbCIsImNvbF9kcmF3aW5nX2JyZWFkIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19idXR0b24iLCJjb2xfZHJhd2luZ19jYXJyb3QiLCJjb2xfZHJhd2luZ19jaGFpbiIsImNvbF9kcmF3aW5nX2Nvcm4iLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX2Nyb3duIiwiY29sX2RyYXdpbmdfZmlzaCIsImNvbF9kcmF3aW5nX2dsYXNzZXMiLCJjb2xfZHJhd2luZ19oYW1tZXIiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9kcmF3aW5nX2hvcnNlIiwiY29sX2RyYXdpbmdfaG91c2UiLCJjb2xfZHJhd2luZ19qYWNrZXQiLCJjb2xfZHJhd2luZ19saW9uIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ19vcmFuZ2UiLCJjb2xfZHJhd2luZ19yYWNjb29uIiwiY29sX2RyYXdpbmdfc3dpbmciLCJjb2xfZHJhd2luZ190aGltYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ196ZWJyYSIsImNvbF9waG90b19kb2xsMSIsImNvbF9waG90b19mb290MSIsImNvbF9waG90b19mcm9nMiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX2hhbmQxIiwiY29sX3Bob3RvX2tldHRsZTIiLCJjb2xfcGhvdG9fa2l0ZTEiLCJjb2xfcGhvdG9fa25pZmUyIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fbGVtb24zIiwiY29sX3Bob3RvX2xvYnN0ZXIyIiwiY29sX3Bob3RvX2xvY2szIiwiY29sX3Bob3RvX3Blbmd1aW4xIiwKICAgICAgICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fcGx1ZzIiLCJjb2xfcGhvdG9fcG90YXRvMSIsImNvbF9waG90b19zaGlydDEiLCJjb2xfcGhvdG9fc2hvZTEiLAogICAgICAgICAgICAgICAgICAgICAgImNvbF9waG90b19za2lydDMiLCJjb2xfcGhvdG9fc25ha2UzIiwiY29sX3Bob3RvX3Nub3dtYW4zIiwiY29sX3Bob3RvX3Nwb29uMiIsCiAgICAgICAgICAgICAgICAgICAgICAiY29sX3Bob3RvX3RvbWF0bzEiLCJjb2xfcGhvdG9fdHJ1bXBldDMiLCJ3b3JkX2JlbHQiLCJ3b3JkX2Nha2UiLCJ3b3JkX2NhbmRsZSIsCiAgICAgICAgICAgICAgICAgICAgICAid29yZF9jYW5ub24iLCJ3b3JkX2R1Y2siLCJ3b3JkX2ZsYWciLCJ3b3JkX2Zsb3dlciIsIndvcmRfZ2lyYWZmZSIsIndvcmRfZ3JhcGVzIiwKICAgICAgICAgICAgICAgICAgICAgICJ3b3JkX2d1aXRhciIsIndvcmRfaGFycCIsIndvcmRfbGFtcCIsIndvcmRfbGVhZiIsIndvcmRfbWl0dGVuIiwid29yZF9tb25rZXkiLAogICAgICAgICAgICAgICAgICAgICAgIndvcmRfb25pb24iLCJ3b3JkX3BlYW51dCIsIndvcmRfc2NyZXciLCJ3b3JkX3N3YW4iLCJ3b3JkX3doaXN0bGUiLCJ3b3JkX3dpbmRvdyIpCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBUZXN0IGRhdGE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgSW1wb3J0IHRlc3QgZGF0YToKIyMgIFNPTkEgLSBjb2xvdXIgKyBncmV5ICh2MTIzKToKZXhwM2FuZDRfX3Rlc3RfZmlsZXMgPC0gYygiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay03ampzLmNzdiIsICMgR3JleS1BLVJGRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stejR2bS5jc3YiLCAjIEdyZXktQS1SRkJHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay03bDMyLmNzdiIsICMgR3JleS1CLVJGRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stZm5pdS5jc3YiLCAjIEdyZXktQi1SRkJHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay0zYndxLmNzdiIsICMgR3JleS1DLVJGRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2stemtqYy5jc3YiLCAjIEdyZXktQy1SRkJHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay1xNml1LmNzdiIsICMgQ29sb3VyLUEtUkZHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjNfdGFzay1lbGJ0LmNzdiIsICMgQ29sb3VyLUEtUkZCRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2steGZvai5jc3YiLCAjIENvbG91ci1CLVJGRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTIzX3Rhc2staGtjaS5jc3YiLCAjIENvbG91ci1CLVJGQkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyM190YXNrLWtja2IuY3N2IiwgIyBDb2xvdXItQy1SRkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyM190YXNrLTZqeXkuY3N2IiwgIyBDb2xvdXItQy1SRkJHCiAgICAgICAgICAgICAgICAjIyAgUHJvbGlmaWMgLSBjb2xvdXIgKHYxMjcpOgogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3Rhc2stcTZpdS5jc3YiLCAjIENvbG91ci1BLVJGRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI3X3Rhc2stZWxidC5jc3YiLCAjIENvbG91ci1BLVJGQkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyN190YXNrLXhmb2ouY3N2IiwgIyBDb2xvdXItQi1SRkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyN190YXNrLWhrY2kuY3N2IiwgIyBDb2xvdXItQi1SRkJHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjdfdGFzay1rY2tiLmNzdiIsICMgQ29sb3VyLUMtUkZHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjdfdGFzay02anl5LmNzdiIsICMgQ29sb3VyLUMtUkZCRwogICAgICAgICAgICAgICAgIyMgIFByb2xpZmljIC0gY29sb3VyICh2MTI4KToKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLXE2aXUuY3N2IiwgIyBDb2xvdXItQS1SRkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEyOF90YXNrLWVsYnQuY3N2IiwgIyBDb2xvdXItQS1SRkJHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjhfdGFzay14Zm9qLmNzdiIsICMgQ29sb3VyLUItUkZHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzEwMTY5LXYxMjhfdGFzay1oa2NpLmNzdiIsICMgQ29sb3VyLUItUkZCRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI4X3Rhc2sta2NrYi5jc3YiLCAjIENvbG91ci1DLVJGRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTI4X3Rhc2stNmp5eS5jc3YiLCAjIENvbG91ci1DLVJGQkcKICAgICAgICAgICAgICAgICMjICBQcm9saWZpYyAtIGdyZXkgKHYxMzEpOgogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3Rhc2stN2pqcy5jc3YiLCAjIEdyZXktQS1SRkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEzMV90YXNrLXo0dm0uY3N2IiwgIyBHcmV5LUEtUkZCRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3Rhc2stN2wzMi5jc3YiLCAjIEdyZXktQi1SRkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEzMV90YXNrLWZuaXUuY3N2IiwgIyBHcmV5LUItUkZCRwogICAgICAgICAgICAgICAgIi4vcmVzb3VyY2VzL2V4cGVyaW1lbnRfM19hbmRfNC9leHBlcmltZW50XzNfYW5kXzRfZGF0YS9kYXRhX2V4cF8xMDE2OS12MTMxX3Rhc2stM2J3cS5jc3YiLCAjIEdyZXktQy1SRkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTAxNjktdjEzMV90YXNrLXpramMuY3N2IiwgIyBHcmV5LUMtUkZCRyAgICAgICAjIyAgSGFub3ZlciAtIGdyZXkgKHY0KToKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTkxMzQtdjRfdGFzay03ampzLmNzdiIsICAgIyBHcmV5LUEtUkZHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzE5MTM0LXY0X3Rhc2stejR2bS5jc3YiLCAgICMgR3JleS1BLVJGQkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTkxMzQtdjRfdGFzay03bDMyLmNzdiIsICAgIyBHcmV5LUItUkZHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzE5MTM0LXY0X3Rhc2stZm5pdS5jc3YiLCAgICMgR3JleS1CLVJGQkcKICAgICAgICAgICAgICAgICIuL3Jlc291cmNlcy9leHBlcmltZW50XzNfYW5kXzQvZXhwZXJpbWVudF8zX2FuZF80X2RhdGEvZGF0YV9leHBfMTkxMzQtdjRfdGFzay0zYndxLmNzdiIsICAgIyBHcmV5LUMtUkZHCiAgICAgICAgICAgICAgICAiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8zX2FuZF80L2V4cGVyaW1lbnRfM19hbmRfNF9kYXRhL2RhdGFfZXhwXzE5MTM0LXY0X3Rhc2stemtqYy5jc3YiKSAgICMgR3JleS1DLVJGQkcKCgojIyAgQ3JlYXRlIHJhdyBkZiBmcm9tIHRoZSBhYm92ZSBmaWxlcywgYnV0IG9ubHkgZ2V0IHRoZSBmb2xsb3dpbmcgY29sdW1uczoKZXhwM2FuZDRfX3Rlc3RfZGF0YSA8LSBtYXBfZGZyKGV4cDNhbmQ0X190ZXN0X2ZpbGVzLH5yZWFkX2NzdigueCwgY29sX3R5cGVzID0gY29sc19vbmx5KCJQYXJ0aWNpcGFudCBQcml2YXRlIElEIiA9ICdjJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUGFydGljaXBhbnQgUHVibGljIElEIj0nYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkV4cGVyaW1lbnQgVmVyc2lvbiI9J2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUYXNrIE5hbWUiID0gJ2MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTY3JlZW4gTmFtZSIgPSAnYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhbmRvbWlzZXItaHI5byIgPSAnYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJhbmRvbWlzZXItcjdmYiIgPSAnYycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0aW0iID0gJ2MnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVzcG9uc2UiID0gJ2MnLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUmVhY3Rpb24gVGltZSIgPSBjb2xfZG91YmxlKCkpKSkgJT4lCiAgIyMgIE1lcmdlIGNvbHVtbnMgdGhhdCBjb250YWluIHRoZSBzYW1lIHR5cGUgb2YgZGF0YSwgYnV0IHdlcmUgb3JpZ2luYWxseSBzcGxpdCBpbnRvIGRpZmZlcmVudCBjb2x1bW5zOgogIHVuaXRlKHN0dWR5X2xpc3QsICAicmFuZG9taXNlci1ocjlvIiwgInJhbmRvbWlzZXItcjdmYiIsIHJlbW92ZSA9IFRSVUUsIG5hLnJtID0gVFJVRSkgJT4lIAogICMjICBSZW5hbWUgc29tZSBjb2x1bW5zOiAgICAKICByZW5hbWUoaWQgPSAiUGFydGljaXBhbnQgUHJpdmF0ZSBJRCIsIHByb2xpZmljX2lkID0gIlBhcnRpY2lwYW50IFB1YmxpYyBJRCIsIGV4cF92ZXIgPSAiRXhwZXJpbWVudCBWZXJzaW9uIiwKICAgICAgICAgdGVzdF9saXN0ID0gIlRhc2sgTmFtZSIsIHNjcmVlbiA9ICJTY3JlZW4gTmFtZSIsIHJlc3BvbnNlID0gIlJlc3BvbnNlIiwgcnQgPSAiUmVhY3Rpb24gVGltZSIpICU+JQogICMjICBSZW9yZGVyIGNvbHVtbnM6ICAgIAogIHNlbGVjdChpZCwgcHJvbGlmaWNfaWQsIGV4cF92ZXIsIHN0dWR5X2xpc3QsIHRlc3RfbGlzdCwgc2NyZWVuLCBzdGltLCByZXNwb25zZSwgcnQpICU+JQogICMjICBTZXQgcGFydGljaXBhbnQgSUQgYXMgdGhlIGdyb3VwaW5nIHZhcmlhYmxlLCBhbmQgYXJyYW5nZSBkYXRhIGJ5IHBhcnRpY2lwYW50IElEOgogIGdyb3VwX2J5KGlkKSAlPiUKICBhcnJhbmdlKGlkKSAlPiUKICAjIyAgUmVtb3ZlIGVtcHR5IC8gdW5pbXBvcnRhbnQgcm93czoKICBkcm9wX25hKHNjcmVlbikgJT4lCiAgZmlsdGVyKHNjcmVlbiAhPSAiY2hlY2siKSAlPiUgCiAgZmlsdGVyKHNjcmVlbiAhPSAiU2NyZWVuIDEiKSAlPiUgCiAgZmlsdGVyKHNjcmVlbiAhPSAiRml4YXRpb24iKSAlPiUgCiAgZmlsdGVyKHJlc3BvbnNlICE9ICJvbGQucG5nIikgJT4lCiAgIyMgIFRpZHkgdXAgcmVzcG9uc2VzIGZvciBjbGFyaXR5OgogIG11dGF0ZV9hbGwoLiwgdG9sb3dlcikgJT4lCiAgbXV0YXRlKHN0dWR5X2xpc3QgPSBzdHJfcmVtb3ZlX2FsbChzdHVkeV9saXN0LCAiW14wLTldKyIpKSAlPiUKICBtdXRhdGUoc3RpbSA9IHN0cl9yZW1vdmVfYWxsKHN0aW0sICIucG5nIikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IHN0cl9yZW1vdmVfYWxsKHJlc3BvbnNlLCAiLnBuZyIpKSAlPiUKICBtdXRhdGUodGVzdF9saXN0ID0gc3RyX3JlbW92ZV9hbGwodGVzdF9saXN0LCAiXiguKj8pICIpKSAlPiUKICBtdXRhdGUoc3RpbSA9IHN0cl9yZXBsYWNlKHN0aW0sICJsaW5lIiwgImRyYXdpbmciKSkgJT4lCiAgc2VwYXJhdGUodGVzdF9saXN0LCBjKCJyZXNwX29wdGlvbiIsICJ0ZXN0X2xpc3QiLCAiY29sX29yX2dyZXkiKSwgc2VwID0gIihbXz86XSkiKSAlPiUKICBhcnJhbmdlKGlkLCByZXNwb25zZSwgc3RpbSkKIyMgIFJlbW92ZSBmaWxsZXIgcmVzcG9uc2VzOgpleHAzYW5kNF9fZmlsbGVyX3N0aW0gPC0gYygid29yZF9jaGlzZWwiLCAid29yZF9kcmVzcyIsICJncmV5X2RyYXdpbmdfcGl0Y2hlciIsICJjb2xfZHJhd2luZ19waXRjaGVyIiwKICAgICAgICAgICAgICAgICAiZ3JleV9kcmF3aW5nX3J1bGVyIiwgImNvbF9kcmF3aW5nX3J1bGVyIiwgImdyZXlfZHJhd2luZ190dXJ0bGUiLAogICAgICAgICAgICAgICAgICJjb2xfZHJhd2luZ190dXJ0bGUiLCAiZ3JleV9waG90b19iaWN5Y2xlMSIsICJjb2xfcGhvdG9fYmljeWNsZTEiLCAKICAgICAgICAgICAgICAgICAiZ3JleV9waG90b19kb25rZXkzIiwgImNvbF9waG90b19kb25rZXkzIiwgImdyZXlfcGhvdG9fZHJlc3NlcjMiLAogICAgICAgICAgICAgICAgICJjb2xfcGhvdG9fZHJlc3NlcjMiKQpleHAzYW5kNF9fdGVzdF9kYXRhIDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKCFzdGltICVpbiUgZXhwM2FuZDRfX2ZpbGxlcl9zdGltKQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgSGl0IGFuZCBtaXNzIGNhbGN1bGF0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIERlZmluZSBvdXIgb3duIGZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyBoaXQgYW5kIG1pc3MgdG90YWxzLiAKZXhwM2FuZDRfX2hpdF9hbmRfbWlzc19jYWxjX2Z1bmN0aW9uIDwtIGZ1bmN0aW9uKHgpewogICMjICBDb3VudCBnZW5lcmFsIHRvdGFsczoKICB4IDwtIHggJT4lCiAgICBhZGRfdGFsbHkocmVzcG9uc2UgIT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9oaXRzIikgJT4lCiAgICBhZGRfdGFsbHkocmVzcG9uc2UgPT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9taXNzIikgJT4lCiAgICBhZGRfdGFsbHkocmVzcG9uc2UgPT0gInJlY29sbGVjdGlvbiIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJyX2hpdCIpICU+JQogICAgYWRkX3RhbGx5KHJlc3BvbnNlID09ICJmYW1pbGlhcml0eSIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJmX2hpdCIpICU+JQogICAgYWRkX3RhbGx5KHJlc3BvbnNlID09ICJib3RoIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImJfaGl0IikgJT4lCiAgICBhZGRfdGFsbHkocmVzcG9uc2UgPT0gImd1ZXNzaW5nIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImdfaGl0IikgJT4lCiAgICAjIyAgQ291bnQgc3RpbS1mb3JtYXQgdG90YWxzOgogICAgYWRkX3RhbGx5KHN0cl9kZXRlY3Qoc3RpbSwgIl53b3JkIikgJiByZXNwb25zZSAhPSAibmV3Iiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInRvdGFsX3dvcmRfaGl0IikgJT4lCiAgICBhZGRfdGFsbHkoc3RyX2RldGVjdChzdGltLCAiXndvcmQiKSAmIHJlc3BvbnNlID09ICJuZXciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAidG90YWxfd29yZF9taXNzIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X2RyYXdpbmciKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfZHJhd2luZyIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgIT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9kcmF3aW5nX2hpdCIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9kcmF3aW5nIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX2RyYXdpbmciKSkKICAgICAgICAgICAgICAmIHJlc3BvbnNlID09ICJuZXciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAidG90YWxfZHJhd2luZ19taXNzIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X3Bob3RvIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX3Bob3RvIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSAhPSAibmV3Iiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInRvdGFsX3Bob3RvX2hpdCIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9waG90byIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9waG90byIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9waG90b19taXNzIikgJT4lCiAgICAjIyAgQ291bnQgc3RpbS1mb3JtYXQgdG90YWxzIGJ5IHJlc3BvbnNlLW9wdGlvbjogCiAgICBhZGRfdGFsbHkoc3RyX2RldGVjdChzdGltLCAiXndvcmQiKSAmIHJlc3BvbnNlID09ICJyZWNvbGxlY3Rpb24iLCBzb3J0ID0gRkFMU0UsIAogICAgICAgICAgICAgIG5hbWUgPSAid29yZF9oaXRfcmVjIikgJT4lCiAgICBhZGRfdGFsbHkoc3RyX2RldGVjdChzdGltLCAiXndvcmQiKSAmIHJlc3BvbnNlID09ICJmYW1pbGlhcml0eSIsIHNvcnQgPSBGQUxTRSwgCiAgICAgICAgICAgICAgbmFtZSA9ICJ3b3JkX2hpdF9mYW0iKSAlPiUKICAgIGFkZF90YWxseShzdHJfZGV0ZWN0KHN0aW0sICJed29yZCIpICYgcmVzcG9uc2UgPT0gImJvdGgiLCBzb3J0ID0gRkFMU0UsIAogICAgICAgICAgICAgIG5hbWUgPSAid29yZF9oaXRfYm90aCIpICU+JQogICAgYWRkX3RhbGx5KHN0cl9kZXRlY3Qoc3RpbSwgIl53b3JkIikgJiByZXNwb25zZSA9PSAiZ3Vlc3NpbmciLCBzb3J0ID0gRkFMU0UsIAogICAgICAgICAgICAgIG5hbWUgPSAid29yZF9oaXRfZ3Vlc3MiKSAlPiUKICAgIGFkZF90YWxseSgoc3RyX2RldGVjdChzdGltLCAiXmdyZXlfZHJhd2luZyIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9kcmF3aW5nIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAicmVjb2xsZWN0aW9uIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImRyYXdpbmdfaGl0X3JlYyIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9kcmF3aW5nIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX2RyYXdpbmciKSkKICAgICAgICAgICAgICAmIHJlc3BvbnNlID09ICJmYW1pbGlhcml0eSIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJkcmF3aW5nX2hpdF9mYW0iKSAlPiUKICAgIGFkZF90YWxseSgoc3RyX2RldGVjdChzdGltLCAiXmdyZXlfZHJhd2luZyIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9kcmF3aW5nIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAiYm90aCIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJkcmF3aW5nX2hpdF9ib3RoIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X2RyYXdpbmciKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfZHJhd2luZyIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gImd1ZXNzaW5nIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImRyYXdpbmdfaGl0X2d1ZXNzIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X3Bob3RvIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX3Bob3RvIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAicmVjb2xsZWN0aW9uIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInBob3RvX2hpdF9yZWMiKSAlPiUKICAgIGFkZF90YWxseSgoc3RyX2RldGVjdChzdGltLCAiXmdyZXlfcGhvdG8iKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfcGhvdG8iKSkKICAgICAgICAgICAgICAmIHJlc3BvbnNlID09ICJmYW1pbGlhcml0eSIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJwaG90b19oaXRfZmFtIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X3Bob3RvIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX3Bob3RvIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAiYm90aCIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJwaG90b19oaXRfYm90aCIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9waG90byIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9waG90byIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gImd1ZXNzaW5nIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInBob3RvX2hpdF9ndWVzcyIpCn0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIEZpbHRlciAnZXhwM2FuZDRfX3Rlc3RfZGF0YScgYnkgZWFjaCBzdHVkeSBsaXN0LCBvbmUtYXQtYS10aW1lLCByZXN1bHRpbmcgaW4geDEyIGRmICh4NiBncmV5ICsgeDYgY29sKS4gICAgICAgICAgICAgICMjCiMjICBGb3IgZWFjaCwgcnVuIG91ciBmdW5jdGlvbiB0aGF0IGNhbGN1bGF0ZXMgdGhlIGhpdCBhbmQgbWlzcyB0b3RhbHMsIHRoZW4gcmVqb2luIGludG8gb25lIGRmLiAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDEgR3JleTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV8xX2dyZXkgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiMSIgJiBjb2xfb3JfZ3JleSA9PSAiZ3JleSIpICU+JSAgICAgIyBMdXJlcyBhcmUgc3RpbGwgaGVyZSBhZnRlciB0aGlzIHN0ZXAuCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfMV9ncmV5X2xpc3QpICU+JSAgICAgICAgICAgICAgICAgICAjIFJlbW92ZSBsdXJlcyAobmV3KSBpdGVtcy4KICBleHAzYW5kNF9faGl0X2FuZF9taXNzX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSAyIEdyZXk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9faGl0X21pc3Nfc3R1ZHlfMl9ncmV5IDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjIiICYgY29sX29yX2dyZXkgPT0gImdyZXkiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV8yX2dyZXlfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX2hpdF9hbmRfbWlzc19jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgMyBHcmV5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzNfZ3JleSA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICIzIiAmIGNvbF9vcl9ncmV5ID09ICJncmV5IikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfM19ncmV5X2xpc3QpICU+JQogIGV4cDNhbmQ0X19oaXRfYW5kX21pc3NfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDQgR3JleTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV80X2dyZXkgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiNCIgJiBjb2xfb3JfZ3JleSA9PSAiZ3JleSIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzRfZ3JleV9saXN0KSAlPiUKICBleHAzYW5kNF9faGl0X2FuZF9taXNzX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSA1IEdyZXk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9faGl0X21pc3Nfc3R1ZHlfNV9ncmV5IDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjUiICYgY29sX29yX2dyZXkgPT0gImdyZXkiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV81X2dyZXlfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX2hpdF9hbmRfbWlzc19jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgNiBHcmV5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzZfZ3JleSA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICI2IiAmIGNvbF9vcl9ncmV5ID09ICJncmV5IikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfNl9ncmV5X2xpc3QpICU+JQogIGV4cDNhbmQ0X19oaXRfYW5kX21pc3NfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDEgQ29sb3VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV8xX2NvbCA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICIxIiAmIGNvbF9vcl9ncmV5ID09ICJjb2wiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV8xX2NvbF9saXN0KSAlPiUKICBleHAzYW5kNF9faGl0X2FuZF9taXNzX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSAyIENvbG91cjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9faGl0X21pc3Nfc3R1ZHlfMl9jb2wgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiMiIgJiBjb2xfb3JfZ3JleSA9PSAiY29sIikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfMl9jb2xfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX2hpdF9hbmRfbWlzc19jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgMyBDb2xvdXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzNfY29sIDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjMiICYgY29sX29yX2dyZXkgPT0gImNvbCIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzNfY29sX2xpc3QpICU+JQogIGV4cDNhbmQ0X19oaXRfYW5kX21pc3NfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDQgQ29sb3VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV80X2NvbCA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICI0IiAmIGNvbF9vcl9ncmV5ID09ICJjb2wiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV80X2NvbF9saXN0KSAlPiUKICBleHAzYW5kNF9faGl0X2FuZF9taXNzX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSA1IENvbG91cjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9faGl0X21pc3Nfc3R1ZHlfNV9jb2wgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiNSIgJiBjb2xfb3JfZ3JleSA9PSAiY29sIikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfNV9jb2xfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX2hpdF9hbmRfbWlzc19jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgNiBDb2xvdXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzZfY29sIDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjYiICYgY29sX29yX2dyZXkgPT0gImNvbCIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzZfY29sX2xpc3QpICU+JQogIGV4cDNhbmQ0X19oaXRfYW5kX21pc3NfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIENvbWJpbmUgaW50byBvbmUgZGY6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19oaXRfYW5kX21pc3MgPC0gYmluZF9yb3dzKGV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV8xX2dyZXksIGV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV8yX2dyZXksIGV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV8zX2dyZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzRfZ3JleSwgZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzVfZ3JleSwgZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzZfZ3JleSwKICAgICAgICAgICAgICAgICAgICAgICAgICBleHAzYW5kNF9faGl0X21pc3Nfc3R1ZHlfMV9jb2wsIGV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV8yX2NvbCwgZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzNfY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgIGV4cDNhbmQ0X19oaXRfbWlzc19zdHVkeV80X2NvbCwgZXhwM2FuZDRfX2hpdF9taXNzX3N0dWR5XzVfY29sLCBleHAzYW5kNF9faGl0X21pc3Nfc3R1ZHlfNl9jb2wpICU+JQogICMjICBNZXJnZSBtdWx0aXBsZSByb3dzIGludG8gb25lIChwZXIgcGFydGljaXBhbnQpOgogIHN1bW1hcmlzZV9hbGwoY29hbGVzY2VfYnlfY29sdW1uKSAlPiUKICAjIyAgUmVtb3ZlIHJlZHVuZGFudCByb3dzOiAKICBzZWxlY3QoLXNjcmVlbiwgLXN0aW0sIC1yZXNwb25zZSwgLXJ0KQoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRkEgYW5kIENSIGNhbGN1bGF0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIERlZmluZSBvdXIgb3duIGZ1bmN0aW9uIHRoYXQgY2FsY3VsYXRlcyBGQSBhbmQgQ1IgdG90YWxzLiAKZXhwM2FuZDRfX0ZBX2FuZF9DUl9jYWxjX2Z1bmN0aW9uIDwtIGZ1bmN0aW9uKHgpewogICMjICBDb3VudCBnZW5lcmFsIHRvdGFsczoKICB4IDwtIHggJT4lCiAgICAjIyAgQ291bnQgZ2VuZXJhbCB0b3RhbHM6CiAgICBhZGRfdGFsbHkocmVzcG9uc2UgIT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9GQSIpICU+JQogICAgYWRkX3RhbGx5KHJlc3BvbnNlID09ICJuZXciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAidG90YWxfQ1IiKSAlPiUKICAgIGFkZF90YWxseShyZXNwb25zZSA9PSAicmVjb2xsZWN0aW9uIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gInJfRkEiKSAlPiUKICAgIGFkZF90YWxseShyZXNwb25zZSA9PSAiZmFtaWxpYXJpdHkiLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAiZl9GQSIpICU+JQogICAgYWRkX3RhbGx5KHJlc3BvbnNlID09ICJib3RoIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImJfRkEiKSAlPiUKICAgIGFkZF90YWxseShyZXNwb25zZSA9PSAiZ3Vlc3NpbmciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAiZ19GQSIpICU+JSAgIAogICAgIyMgIENvdW50IHN0aW0tZm9ybWF0IHRvdGFsczoKICAgIGFkZF90YWxseShzdHJfZGV0ZWN0KHN0aW0sICJed29yZCIpICYgcmVzcG9uc2UgIT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF93b3JkX0ZBIikgJT4lCiAgICBhZGRfdGFsbHkoc3RyX2RldGVjdChzdGltLCAiXndvcmQiKSAmIHJlc3BvbnNlID09ICJuZXciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAidG90YWxfd29yZF9DUiIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9kcmF3aW5nIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX2RyYXdpbmciKSkKICAgICAgICAgICAgICAmIHJlc3BvbnNlICE9ICJuZXciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAidG90YWxfZHJhd2luZ19GQSIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9kcmF3aW5nIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX2RyYXdpbmciKSkKICAgICAgICAgICAgICAmIHJlc3BvbnNlID09ICJuZXciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAidG90YWxfZHJhd2luZ19DUiIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9waG90byIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9waG90byIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgIT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9waG90b19GQSIpICU+JQogICAgYWRkX3RhbGx5KChzdHJfZGV0ZWN0KHN0aW0sICJeZ3JleV9waG90byIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9waG90byIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gIm5ldyIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJ0b3RhbF9waG90b19DUiIpICU+JQogICAgIyMgIENvdW50IHN0aW0tZm9ybWF0IHRvdGFscyBieSByZXNwb25zZS1vcHRpb246IAogICAgYWRkX3RhbGx5KHN0cl9kZXRlY3Qoc3RpbSwgIl53b3JkIikgJiByZXNwb25zZSA9PSAicmVjb2xsZWN0aW9uIiwgc29ydCA9IEZBTFNFLCAKICAgICAgICAgICAgICBuYW1lID0gIndvcmRfRkFfcmVjIikgJT4lCiAgICBhZGRfdGFsbHkoc3RyX2RldGVjdChzdGltLCAiXndvcmQiKSAmIHJlc3BvbnNlID09ICJmYW1pbGlhcml0eSIsIHNvcnQgPSBGQUxTRSwgCiAgICAgICAgICAgICAgbmFtZSA9ICJ3b3JkX0ZBX2ZhbSIpICU+JQogICAgYWRkX3RhbGx5KHN0cl9kZXRlY3Qoc3RpbSwgIl53b3JkIikgJiByZXNwb25zZSA9PSAiYm90aCIsIHNvcnQgPSBGQUxTRSwgCiAgICAgICAgICAgICAgbmFtZSA9ICJ3b3JkX0ZBX2JvdGgiKSAlPiUKICAgIGFkZF90YWxseShzdHJfZGV0ZWN0KHN0aW0sICJed29yZCIpICYgcmVzcG9uc2UgPT0gImd1ZXNzaW5nIiwgc29ydCA9IEZBTFNFLCAKICAgICAgICAgICAgICBuYW1lID0gIndvcmRfRkFfZ3Vlc3MiKSAlPiUKICAgIGFkZF90YWxseSgoc3RyX2RldGVjdChzdGltLCAiXmdyZXlfZHJhd2luZyIpIHwgc3RyX2RldGVjdChzdGltLCAiXmNvbF9kcmF3aW5nIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAicmVjb2xsZWN0aW9uIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImRyYXdpbmdfRkFfcmVjIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X2RyYXdpbmciKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfZHJhd2luZyIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gImZhbWlsaWFyaXR5Iiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImRyYXdpbmdfRkFfZmFtIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X2RyYXdpbmciKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfZHJhd2luZyIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gImJvdGgiLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAiZHJhd2luZ19GQV9ib3RoIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X2RyYXdpbmciKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfZHJhd2luZyIpKQogICAgICAgICAgICAgICYgcmVzcG9uc2UgPT0gImd1ZXNzaW5nIiwgc29ydCA9IEZBTFNFLCBuYW1lID0gImRyYXdpbmdfRkFfZ3Vlc3MiKSAlPiUKICAgIGFkZF90YWxseSgoc3RyX2RldGVjdChzdGltLCAiXmdyZXlfcGhvdG8iKSB8IHN0cl9kZXRlY3Qoc3RpbSwgIl5jb2xfcGhvdG8iKSkKICAgICAgICAgICAgICAmIHJlc3BvbnNlID09ICJyZWNvbGxlY3Rpb24iLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAicGhvdG9fRkFfcmVjIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X3Bob3RvIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX3Bob3RvIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAiZmFtaWxpYXJpdHkiLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAicGhvdG9fRkFfZmFtIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X3Bob3RvIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX3Bob3RvIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAiYm90aCIsIHNvcnQgPSBGQUxTRSwgbmFtZSA9ICJwaG90b19GQV9ib3RoIikgJT4lCiAgICBhZGRfdGFsbHkoKHN0cl9kZXRlY3Qoc3RpbSwgIl5ncmV5X3Bob3RvIikgfCBzdHJfZGV0ZWN0KHN0aW0sICJeY29sX3Bob3RvIikpCiAgICAgICAgICAgICAgJiByZXNwb25zZSA9PSAiZ3Vlc3NpbmciLCBzb3J0ID0gRkFMU0UsIG5hbWUgPSAicGhvdG9fRkFfZ3Vlc3MiKQp9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICBGaWx0ZXIgJ2V4cDNhbmQ0X190ZXN0X2RhdGEnIGJ5IGVhY2ggc3R1ZHkgbGlzdCwgb25lLWF0LWEtdGltZSwgcmVzdWx0aW5nIGluIHgxMiBkZiAoeDYgZ3JleSArIHg2IGNvbCkuICAgICAgICAgICAgICAjIwojIyAgRm9yIGVhY2gsIHJ1biBvdXIgZnVuY3Rpb24gdGhhdCBjYWxjdWxhdGVzIHRoZSBGQSBhbmQgQ1IgdG90YWxzLCB0aGVuIHJlam9pbiBpbnRvIG9uZSBkZi4gICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSAxIEdyZXk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfMV9ncmV5IDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjEiICYgY29sX29yX2dyZXkgPT0gImdyZXkiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV80X2dyZXlfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX0ZBX2FuZF9DUl9jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgMiBHcmV5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzJfZ3JleSA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICIyIiAmIGNvbF9vcl9ncmV5ID09ICJncmV5IikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfNV9ncmV5X2xpc3QpICU+JQogIGV4cDNhbmQ0X19GQV9hbmRfQ1JfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDMgR3JleTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19GQV9DUl9zdHVkeV8zX2dyZXkgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiMyIgJiBjb2xfb3JfZ3JleSA9PSAiZ3JleSIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzZfZ3JleV9saXN0KSAlPiUKICBleHAzYW5kNF9fRkFfYW5kX0NSX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSA0IEdyZXk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfNF9ncmV5IDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjQiICYgY29sX29yX2dyZXkgPT0gImdyZXkiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV8xX2dyZXlfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX0ZBX2FuZF9DUl9jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgNSBHcmV5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzVfZ3JleSA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICI1IiAmIGNvbF9vcl9ncmV5ID09ICJncmV5IikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfMl9ncmV5X2xpc3QpICU+JQogIGV4cDNhbmQ0X19GQV9hbmRfQ1JfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDYgR3JleTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19GQV9DUl9zdHVkeV82X2dyZXkgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiNiIgJiBjb2xfb3JfZ3JleSA9PSAiZ3JleSIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzNfZ3JleV9saXN0KSAlPiUKICBleHAzYW5kNF9fRkFfYW5kX0NSX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSAxIENvbG91cjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfMV9jb2wgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiMSIgJiBjb2xfb3JfZ3JleSA9PSAiY29sIikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfNF9jb2xfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX0ZBX2FuZF9DUl9jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgMiBDb2xvdXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzJfY29sIDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjIiICYgY29sX29yX2dyZXkgPT0gImNvbCIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzVfY29sX2xpc3QpICU+JQogIGV4cDNhbmQ0X19GQV9hbmRfQ1JfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDMgQ29sb3VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19GQV9DUl9zdHVkeV8zX2NvbCA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICIzIiAmIGNvbF9vcl9ncmV5ID09ICJjb2wiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV82X2NvbF9saXN0KSAlPiUKICBleHAzYW5kNF9fRkFfYW5kX0NSX2NhbGNfZnVuY3Rpb24oKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBTdHVkeSA0IENvbG91cjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfNF9jb2wgPC0gZXhwM2FuZDRfX3Rlc3RfZGF0YSAlPiUKICBmaWx0ZXIoc3R1ZHlfbGlzdCA9PSAiNCIgJiBjb2xfb3JfZ3JleSA9PSAiY29sIikgJT4lCiAgZmlsdGVyKHN0aW0gJWluJSBleHAzYW5kNF9fc3R1ZHlfMV9jb2xfbGlzdCkgJT4lCiAgZXhwM2FuZDRfX0ZBX2FuZF9DUl9jYWxjX2Z1bmN0aW9uKCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgU3R1ZHkgNSBDb2xvdXI6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzVfY29sIDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgZmlsdGVyKHN0dWR5X2xpc3QgPT0gIjUiICYgY29sX29yX2dyZXkgPT0gImNvbCIpICU+JQogIGZpbHRlcihzdGltICVpbiUgZXhwM2FuZDRfX3N0dWR5XzJfY29sX2xpc3QpICU+JQogIGV4cDNhbmQ0X19GQV9hbmRfQ1JfY2FsY19mdW5jdGlvbigpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFN0dWR5IDYgQ29sb3VyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCmV4cDNhbmQ0X19GQV9DUl9zdHVkeV82X2NvbCA8LSBleHAzYW5kNF9fdGVzdF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9saXN0ID09ICI2IiAmIGNvbF9vcl9ncmV5ID09ICJjb2wiKSAlPiUKICBmaWx0ZXIoc3RpbSAlaW4lIGV4cDNhbmQ0X19zdHVkeV8zX2NvbF9saXN0KSAlPiUKICBleHAzYW5kNF9fRkFfYW5kX0NSX2NhbGNfZnVuY3Rpb24oKQojIyAgQ29tYmluZSBpbnRvIG9uZSBkZjoKZXhwM2FuZDRfX0ZBX2FuZF9DUiA8LSBiaW5kX3Jvd3MoZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzFfZ3JleSwgZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzJfZ3JleSwgZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzNfZ3JleSwKICAgICAgICAgICAgICAgICAgICAgICBleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfNF9ncmV5LCBleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfNV9ncmV5LCBleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfNl9ncmV5LAogICAgICAgICAgICAgICAgICAgICAgIGV4cDNhbmQ0X19GQV9DUl9zdHVkeV8xX2NvbCwgZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzJfY29sLCBleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfM19jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgZXhwM2FuZDRfX0ZBX0NSX3N0dWR5XzRfY29sLCBleHAzYW5kNF9fRkFfQ1Jfc3R1ZHlfNV9jb2wsIGV4cDNhbmQ0X19GQV9DUl9zdHVkeV82X2NvbCkgJT4lCiAgIyMgIE1lcmdlIG11bHRpcGxlIHJvd3MgaW50byBvbmUgKHBlciBwYXJ0aWNpcGFudCk6CiAgc3VtbWFyaXNlX2FsbChjb2FsZXNjZV9ieV9jb2x1bW4pICU+JQogICMjICBSZW1vdmUgcmVkdW5kYW50IHJvd3M6IAogIHNlbGVjdCgtc2NyZWVuLCAtc3RpbSwgLXJlc3BvbnNlLCAtcnQpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFByb3BvcnRpb25zLCB6LXNjb3JlcywgZCcsIGM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICBKb2luICdleHAzYW5kNF9faGl0X2FuZF9taXNzJyBhbmQgJ2V4cDNhbmQ0X19GQV9hbmRfQ1InIGRmczoKZXhwM2FuZDRfX3Rlc3Rfc3RhdHMgPC0gZXhwM2FuZDRfX2hpdF9hbmRfbWlzcyAlPiUKICByaWdodF9qb2luKGV4cDNhbmQ0X19GQV9hbmRfQ1IpICU+JQogICMjICBDYWxjdWxhdGUgaGl0IHByb3BvcnRpb25zOgogICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFdvcmRzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICBQcm9wb3J0aW9uIG9mIHdvcmQgaGl0czogdG90YWwgbnVtYmVyIG9mIHdvcmQgaXRlbXMgKHdvcmQgaGl0cyArIHdvcmQgbWlzcykgLyB3b3JkIGhpdHM6Cm11dGF0ZShwcm9wX3dvcmRfaGl0ID0gdG90YWxfd29yZF9oaXQgLyAodG90YWxfd29yZF9oaXQgKyB0b3RhbF93b3JkX21pc3MpKSAlPiUKICAjIyAgUHJvcG9ydGlvbiBvZiB0b3RhbF93b3JkIG1pc3NlczogdG90YWwgbnVtYmVyIG9mIHRvdGFsX3dvcmQgaXRlbXMKICAjIyAgKHRvdGFsX3dvcmQgaGl0cyArIHRvdGFsX3dvcmQgbWlzcykgLyB0b3RhbF93b3JkIG1pc3NlczoKICBtdXRhdGUocHJvcF93b3JkX21pc3MgPSB0b3RhbF93b3JkX21pc3MgLyAodG90YWxfd29yZF9oaXQgKyB0b3RhbF93b3JkX21pc3MpKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF93b3JkIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYzoKICBtdXRhdGUocHJvcF93b3JkX2hpdF9yZWMgPSB3b3JkX2hpdF9yZWMgLyB0b3RhbF93b3JkX2hpdCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfd29yZCBoaXRzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBGYW06CiAgbXV0YXRlKHByb3Bfd29yZF9oaXRfZmFtID0gd29yZF9oaXRfZmFtIC8gdG90YWxfd29yZF9oaXQpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX3dvcmQgaGl0cywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgQm90aDoKICBtdXRhdGUocHJvcF93b3JkX2hpdF9ib3RoID0gd29yZF9oaXRfYm90aCAvIHRvdGFsX3dvcmRfaGl0KSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF93b3JkIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEd1ZXNzaW5nOgogIG11dGF0ZShwcm9wX3dvcmRfaGl0X2d1ZXNzID0gd29yZF9oaXRfZ3Vlc3MgLyB0b3RhbF93b3JkX2hpdCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfd29yZCBoaXRzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBSZWMgKGluY2x1ZGluZyBCb3RoIHJlc3BvbnNlcyk6CiAgbXV0YXRlKHByb3Bfd29yZF9oaXRfcmVjX3RvdGFsID0gcHJvcF93b3JkX2hpdF9yZWMgKyBwcm9wX3dvcmRfaGl0X2JvdGgpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX3dvcmQgaGl0cywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgRmFtIChpbmNsdWRpbmcgQm90aCByZXNwb25zZXMpOgogIG11dGF0ZShwcm9wX3dvcmRfaGl0X2ZhbV90b3RhbCA9IHByb3Bfd29yZF9oaXRfZmFtICsgcHJvcF93b3JkX2hpdF9ib3RoKSAlPiUKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBEcmF3aW5nczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgUHJvcG9ydGlvbiBvZiBkcmF3aW5nIGhpdHM6IHRvdGFsIG51bWJlciBvZiBkcmF3aW5nIGl0ZW1zIChkcmF3aW5nIGhpdHMgKyBkcmF3aW5nIG1pc3MpIC8gZHJhd2luZyBoaXRzOgptdXRhdGUocHJvcF9kcmF3aW5nX2hpdCA9IHRvdGFsX2RyYXdpbmdfaGl0IC8gKHRvdGFsX2RyYXdpbmdfaGl0ICsgdG90YWxfZHJhd2luZ19taXNzKSkgJT4lCiAgIyMgIFByb3BvcnRpb24gb2YgdG90YWxfZHJhd2luZyBtaXNzZXM6IHRvdGFsIG51bWJlciBvZiB0b3RhbF9kcmF3aW5nIGl0ZW1zIAogICMjICAodG90YWxfZHJhd2luZyBoaXRzICsgdG90YWxfZHJhd2luZyBtaXNzKSAvIHRvdGFsX2RyYXdpbmcgbWlzc2VzOgogIG11dGF0ZShwcm9wX2RyYXdpbmdfbWlzcyA9IHRvdGFsX2RyYXdpbmdfbWlzcyAvICh0b3RhbF9kcmF3aW5nX2hpdCArIHRvdGFsX2RyYXdpbmdfbWlzcykpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX2RyYXdpbmcgaGl0cywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgUmVjOgogIG11dGF0ZShwcm9wX2RyYXdpbmdfaGl0X3JlYyA9IGRyYXdpbmdfaGl0X3JlYyAvIHRvdGFsX2RyYXdpbmdfaGl0KSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEZhbToKICBtdXRhdGUocHJvcF9kcmF3aW5nX2hpdF9mYW0gPSBkcmF3aW5nX2hpdF9mYW0gLyB0b3RhbF9kcmF3aW5nX2hpdCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfZHJhd2luZyBoaXRzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBCb3RoOgogIG11dGF0ZShwcm9wX2RyYXdpbmdfaGl0X2JvdGggPSBkcmF3aW5nX2hpdF9ib3RoIC8gdG90YWxfZHJhd2luZ19oaXQpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX2RyYXdpbmcgaGl0cywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgR3Vlc3Npbmc6CiAgbXV0YXRlKHByb3BfZHJhd2luZ19oaXRfZ3Vlc3MgPSBkcmF3aW5nX2hpdF9ndWVzcyAvIHRvdGFsX2RyYXdpbmdfaGl0KSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYyAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF9kcmF3aW5nX2hpdF9yZWNfdG90YWwgPSBwcm9wX2RyYXdpbmdfaGl0X3JlYyArIHByb3BfZHJhd2luZ19oaXRfYm90aCkgJT4lCiAgIyMgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEZhbSAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF9kcmF3aW5nX2hpdF9mYW1fdG90YWwgPSBwcm9wX2RyYXdpbmdfaGl0X2ZhbSArIHByb3BfZHJhd2luZ19oaXRfYm90aCkgJT4lCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgUGhvdG9zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgCiMjICBQcm9wb3J0aW9uIG9mIHBob3RvIGhpdHM6IHRvdGFsIG51bWJlciBvZiBwaG90byBpdGVtcyAocGhvdG8gaGl0cyArIHBob3RvIG1pc3MpIC8gcGhvdG8gaGl0czoKbXV0YXRlKHByb3BfcGhvdG9faGl0ID0gdG90YWxfcGhvdG9faGl0IC8gKHRvdGFsX3Bob3RvX2hpdCArIHRvdGFsX3Bob3RvX21pc3MpKSAlPiUKICAjIyAgUHJvcG9ydGlvbiBvZiB0b3RhbF9waG90byBtaXNzZXM6IHRvdGFsIG51bWJlcjouIAogIG11dGF0ZShwcm9wX3Bob3RvX21pc3MgPSB0b3RhbF9waG90b19taXNzIC8gKHRvdGFsX3Bob3RvX2hpdCArIHRvdGFsX3Bob3RvX21pc3MpKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9waG90byBoaXRzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBSZWM6CiAgbXV0YXRlKHByb3BfcGhvdG9faGl0X3JlYyA9IHBob3RvX2hpdF9yZWMgLyB0b3RhbF9waG90b19oaXQpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX3Bob3RvIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEZhbToKICBtdXRhdGUocHJvcF9waG90b19oaXRfZmFtID0gcGhvdG9faGl0X2ZhbSAvIHRvdGFsX3Bob3RvX2hpdCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfcGhvdG8gaGl0cywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgQm90aDoKICBtdXRhdGUocHJvcF9waG90b19oaXRfYm90aCA9IHBob3RvX2hpdF9ib3RoIC8gdG90YWxfcGhvdG9faGl0KSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9waG90byBoaXRzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBHdWVzc2luZzoKICBtdXRhdGUocHJvcF9waG90b19oaXRfZ3Vlc3MgPSBwaG90b19oaXRfZ3Vlc3MgLyB0b3RhbF9waG90b19oaXQpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX3Bob3RvIGhpdHMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYyAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF9waG90b19oaXRfcmVjX3RvdGFsID0gcHJvcF9waG90b19oaXRfcmVjICsgcHJvcF9waG90b19oaXRfYm90aCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfcGhvdG8gaGl0cywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgRmFtIChpbmNsdWRpbmcgQm90aCByZXNwb25zZXMpOgogIG11dGF0ZShwcm9wX3Bob3RvX2hpdF9mYW1fdG90YWwgPSBwcm9wX3Bob3RvX2hpdF9mYW0gKyBwcm9wX3Bob3RvX2hpdF9ib3RoKSAlPiUKICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBDYWxjdWxhdGUgRkEgcHJvcG9ydGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBXb3JkczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgUHJvcG9ydGlvbiBvZiB3b3JkIEZBczogdG90YWwgbnVtYmVyIG9mIHdvcmQgaXRlbXMgKHdvcmQgRkFzICsgd29yZCBDUikgLyB3b3JkIEZBczogICAgCm11dGF0ZShwcm9wX3dvcmRfRkEgPSB0b3RhbF93b3JkX0ZBIC8gKHRvdGFsX3dvcmRfRkEgKyB0b3RhbF93b3JkX0NSKSkgJT4lCiAgIyMgIFByb3BvcnRpb24gb2YgdG90YWxfd29yZCBDUnM6IHRvdGFsIG51bWJlciBvZiB0b3RhbF93b3JkIGl0ZW1zCiAgIyMgICh0b3RhbF93b3JkIEZBcyArIHRvdGFsX3dvcmQgQ1IpIC8gdG90YWxfd29yZCBDUnM6CiAgbXV0YXRlKHByb3Bfd29yZF9DUiA9IHRvdGFsX3dvcmRfQ1IgLyAodG90YWxfd29yZF9GQSArIHRvdGFsX3dvcmRfQ1IpKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF93b3JkIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgUmVjOgogIG11dGF0ZShwcm9wX3dvcmRfRkFfcmVjID0gd29yZF9GQV9yZWMgLyB0b3RhbF93b3JkX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF93b3JkIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgRmFtOgogIG11dGF0ZShwcm9wX3dvcmRfRkFfZmFtID0gd29yZF9GQV9mYW0gLyB0b3RhbF93b3JkX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF93b3JkIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgQm90aDoKICBtdXRhdGUocHJvcF93b3JkX0ZBX2JvdGggPSB3b3JkX0ZBX2JvdGggLyB0b3RhbF93b3JkX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF93b3JkIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgR3Vlc3Npbmc6CiAgbXV0YXRlKHByb3Bfd29yZF9GQV9ndWVzcyA9IHdvcmRfRkFfZ3Vlc3MgLyB0b3RhbF93b3JkX0ZBKSAlPiUKICAjIyAgUmVwbGFjZSBuYW4gd2l0aCAwOiAgIAogIG11dGF0ZV9hdCh2YXJzKHByb3Bfd29yZF9GQV9yZWMsIHByb3Bfd29yZF9GQV9mYW0sIHByb3Bfd29yZF9GQV9ib3RoLCBwcm9wX3dvcmRfRkFfZ3Vlc3MpLCAKICAgICAgICAgICAgfnJlcGxhY2UoLiwgaXMubmFuKC4pLCAwKSkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfd29yZCBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYyAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF93b3JkX0ZBX3JlY190b3RhbCA9IHByb3Bfd29yZF9GQV9yZWMgKyBwcm9wX3dvcmRfRkFfYm90aCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfd29yZCBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEZhbSAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF93b3JkX0ZBX2ZhbV90b3RhbCA9IHByb3Bfd29yZF9GQV9mYW0gKyBwcm9wX3dvcmRfRkFfYm90aCkgJT4lCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRHJhd2luZ3M6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIFByb3BvcnRpb24gb2YgZHJhd2luZyBGQXM6IHRvdGFsIG51bWJlciBvZiBkcmF3aW5nIGl0ZW1zIChkcmF3aW5nIEZBcyArIGRyYXdpbmcgQ1IpIC8gZHJhd2luZyBGQXMuIAptdXRhdGUocHJvcF9kcmF3aW5nX0ZBID0gdG90YWxfZHJhd2luZ19GQSAvICh0b3RhbF9kcmF3aW5nX0ZBICsgdG90YWxfZHJhd2luZ19DUikpICU+JQogICMjICBQcm9wb3J0aW9uIG9mIHRvdGFsX2RyYXdpbmcgQ1JzOiB0b3RhbCBudW1iZXIgb2YgdG90YWxfZHJhd2luZyBpdGVtcyAKICAjIyAgKHRvdGFsX2RyYXdpbmcgRkFzICsgdG90YWxfZHJhd2luZyBDUikgLyB0b3RhbF9kcmF3aW5nIENScy4gCiAgbXV0YXRlKHByb3BfZHJhd2luZ19DUiA9IHRvdGFsX2RyYXdpbmdfQ1IgLyAodG90YWxfZHJhd2luZ19GQSArIHRvdGFsX2RyYXdpbmdfQ1IpKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgUmVjOgogIG11dGF0ZShwcm9wX2RyYXdpbmdfRkFfcmVjID0gZHJhd2luZ19GQV9yZWMgLyB0b3RhbF9kcmF3aW5nX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgRmFtOgogIG11dGF0ZShwcm9wX2RyYXdpbmdfRkFfZmFtID0gZHJhd2luZ19GQV9mYW0gLyB0b3RhbF9kcmF3aW5nX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgQm90aDoKICBtdXRhdGUocHJvcF9kcmF3aW5nX0ZBX2JvdGggPSBkcmF3aW5nX0ZBX2JvdGggLyB0b3RhbF9kcmF3aW5nX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9kcmF3aW5nIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgR3Vlc3Npbmc6CiAgbXV0YXRlKHByb3BfZHJhd2luZ19GQV9ndWVzcyA9IGRyYXdpbmdfRkFfZ3Vlc3MgLyB0b3RhbF9kcmF3aW5nX0ZBKSAlPiUKICAjIyAgUmVwbGFjZSBuYW4gd2l0aCAwOgogIG11dGF0ZV9hdCh2YXJzKHByb3BfZHJhd2luZ19GQV9yZWMsIHByb3BfZHJhd2luZ19GQV9mYW0sIHByb3BfZHJhd2luZ19GQV9ib3RoLCBwcm9wX2RyYXdpbmdfRkFfZ3Vlc3MpLCAKICAgICAgICAgICAgfnJlcGxhY2UoLiwgaXMubmFuKC4pLCAwKSkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfZHJhd2luZyBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYyAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF9kcmF3aW5nX0ZBX3JlY190b3RhbCA9IHByb3BfZHJhd2luZ19GQV9yZWMgKyBwcm9wX2RyYXdpbmdfRkFfYm90aCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfZHJhd2luZyBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEZhbSAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF9kcmF3aW5nX0ZBX2ZhbV90b3RhbCA9IHByb3BfZHJhd2luZ19GQV9mYW0gKyBwcm9wX2RyYXdpbmdfRkFfYm90aCkgJT4lCiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgUGhvdG9zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIFByb3BvcnRpb24gb2YgcGhvdG8gRkFzOiB0b3RhbCBudW1iZXIgb2YgcGhvdG8gaXRlbXMgKHBob3RvIEZBcyArIHBob3RvIENSKSAvIHBob3RvIEZBczoKbXV0YXRlKHByb3BfcGhvdG9fRkEgPSB0b3RhbF9waG90b19GQSAvICh0b3RhbF9waG90b19GQSArIHRvdGFsX3Bob3RvX0NSKSkgJT4lCiAgIyMgIFByb3BvcnRpb24gb2YgdG90YWxfcGhvdG8gQ1JzOiB0b3RhbCBudW1iZXIgb2YgdG90YWxfcGhvdG8gaXRlbXMKICAjIyAgKHRvdGFsX3Bob3RvIEZBcyArIHRvdGFsX3Bob3RvIENSKSAvIHRvdGFsX3Bob3RvIENSczoKICBtdXRhdGUocHJvcF9waG90b19DUiA9IHRvdGFsX3Bob3RvX0NSIC8gKHRvdGFsX3Bob3RvX0ZBICsgdG90YWxfcGhvdG9fQ1IpKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9waG90byBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYzoKICBtdXRhdGUocHJvcF9waG90b19GQV9yZWMgPSBwaG90b19GQV9yZWMgLyB0b3RhbF9waG90b19GQSkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfcGhvdG8gRkFzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBGYW06CiAgbXV0YXRlKHByb3BfcGhvdG9fRkFfZmFtID0gcGhvdG9fRkFfZmFtIC8gdG90YWxfcGhvdG9fRkEpICU+JQogICMjICBPdXQgb2YgYWxsIHRvdGFsX3Bob3RvIEZBcywgd2hhdCBwcm9wb3J0aW9uIHdlcmUgQm90aDoKICBtdXRhdGUocHJvcF9waG90b19GQV9ib3RoID0gcGhvdG9fRkFfYm90aCAvIHRvdGFsX3Bob3RvX0ZBKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9waG90byBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIEd1ZXNzaW5nOgogIG11dGF0ZShwcm9wX3Bob3RvX0ZBX2d1ZXNzID0gcGhvdG9fRkFfZ3Vlc3MgLyB0b3RhbF9waG90b19GQSkgJT4lCiAgIyMgIFJlcGxhY2UgbmFuIHdpdGggMDoKICBtdXRhdGVfYXQodmFycyhwcm9wX3Bob3RvX0ZBX3JlYywgcHJvcF9waG90b19GQV9mYW0sIHByb3BfcGhvdG9fRkFfYm90aCwgcHJvcF9waG90b19GQV9ndWVzcyksIAogICAgICAgICAgICB+cmVwbGFjZSguLCBpcy5uYW4oLiksIDApKSAlPiUKICAjIyAgT3V0IG9mIGFsbCB0b3RhbF9waG90byBGQXMsIHdoYXQgcHJvcG9ydGlvbiB3ZXJlIFJlYyAoaW5jbHVkaW5nIEJvdGggcmVzcG9uc2VzKToKICBtdXRhdGUocHJvcF9waG90b19GQV9yZWNfdG90YWwgPSBwcm9wX3Bob3RvX0ZBX3JlYyArIHByb3BfcGhvdG9fRkFfYm90aCkgJT4lCiAgIyMgIE91dCBvZiBhbGwgdG90YWxfcGhvdG8gRkFzLCB3aGF0IHByb3BvcnRpb24gd2VyZSBGYW0gKGluY2x1ZGluZyBCb3RoIHJlc3BvbnNlcyk6CiAgbXV0YXRlKHByb3BfcGhvdG9fRkFfZmFtX3RvdGFsID0gcHJvcF9waG90b19GQV9mYW0gKyBwcm9wX3Bob3RvX0ZBX2JvdGgpICU+JQogIAogICMjICBDYWxjdWxhdGUgb3ZlcmFsbCByZWNvZ25pdGlvbjoKICAjIyAgSElUUyAtIEZBcyA9IG92ZXJhbGwgbWVhc3VyZSBvZiByZWNvZ25pdGlvbjoKICBtdXRhdGUocGhvdG9fcmVjb2cgPSBwcm9wX3Bob3RvX2hpdCAtIHByb3BfcGhvdG9fRkEpICU+JQogIG11dGF0ZShkcmF3aW5nX3JlY29nID0gcHJvcF9kcmF3aW5nX2hpdCAtIHByb3BfZHJhd2luZ19GQSkgJT4lCiAgbXV0YXRlKHdvcmRfcmVjb2cgPSBwcm9wX3dvcmRfaGl0IC0gcHJvcF93b3JkX0ZBKSAlPiUKICAjIyAgQ2xhc3NpYyB6LXNjb3JlIGNhbGN1bGF0aW9ucyAodGFrZSBQcyBzY29yZSwgc3VidHJhY3QgdGhlIG1lYW4sIGFuZCBkaXZpZGUgdGhlIGRpZmZlcmVuY2UgYnkgdGhlIFNEKS4gCiAgI211dGF0ZShjbGFzc2ljX3pfaGl0X3dvcmQgPSAodG90YWxfd29yZF9oaXQgLSBtZWFuKHRvdGFsX3dvcmRfaGl0KSkgLyBzZCh0b3RhbF93b3JkX2hpdCkpICU+JQogICNtdXRhdGUoY2xhc3NpY196X0ZBX3dvcmQgPSAodG90YWxfd29yZF9GQSAtIG1lYW4odG90YWxfd29yZF9GQSkpIC8gc2QodG90YWxfd29yZF9GQSkpICU+JQogICNtdXRhdGUoY2xhc3NpY196X2hpdF9kcmF3aW5nID0gKHRvdGFsX2RyYXdpbmdfaGl0IC0gbWVhbih0b3RhbF9kcmF3aW5nX2hpdCkpIC8gc2QodG90YWxfZHJhd2luZ19oaXQpKSU+JQogICNtdXRhdGUoY2xhc3NpY196X0ZBX2RyYXdpbmcgPSAodG90YWxfZHJhd2luZ19GQSAtIG1lYW4odG90YWxfZHJhd2luZ19GQSkpIC8gc2QodG90YWxfZHJhd2luZ19GQSkpICU+JQogICNtdXRhdGUoY2xhc3NpY196X2hpdF9waG90byA9ICh0b3RhbF9waG90b19oaXQgLSBtZWFuKHRvdGFsX3Bob3RvX2hpdCkpIC8gc2QodG90YWxfcGhvdG9faGl0KSkgJT4lCiAgI211dGF0ZShjbGFzc2ljX3pfRkFfcGhvdG8gPSAodG90YWxfcGhvdG9fRkEgLSBtZWFuKHRvdGFsX3Bob3RvX0ZBKSkgLyBzZCh0b3RhbF9waG90b19GQSkpICU+JQogICMjICB6LXNjb3JlcyAoaG93IHdlIHByZXZpb3VzbHkgY2FsY3VsYXRlZCB0aGVtIGluIEV4Y2VsICg9Tk9STVNJTlYoKEVTOCswLjUpIC8gU1VNKEVTODpFVDgsMSkpLiAicW5vcm0iIGlzIHRoZSAKICAjIyAgciBlcXVpdmVsYW50IG9mICI9Tk9STVNJTlYiOiBJbnZlcnNlIG9mIHRoZSBzdGFuZGFyZCBub3JtYWwgY3VtdWxhdGl2ZSBkaXN0cmlidXRpb24sIHdpdGggYSBwcm9iYWJpbGl0eSBvZiAKICAjIyAgeCAodGhlIHZhbHVlIHdlIGNhbGN1bGF0ZWQpLik6CiAgbXV0YXRlKCJ6X3RvdGFsX3dvcmRfaGl0IiA9IHFub3JtKCh0b3RhbF93b3JkX2hpdCArIDAuNSkgLyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG90YWxfd29yZF9oaXQgKyB0b3RhbF93b3JkX21pc3MgKyAxKSkpICU+JQogIG11dGF0ZSgiel90b3RhbF93b3JkX0ZBIiA9IHFub3JtKCh0b3RhbF93b3JkX0ZBICsgMC41KSAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRvdGFsX3dvcmRfRkEgKyB0b3RhbF93b3JkX0NSICsgMSkpKSAlPiUgICAgICAgICAKICBtdXRhdGUoInpfdG90YWxfZHJhd2luZ19oaXQiID0gcW5vcm0oKHRvdGFsX2RyYXdpbmdfaGl0ICsgMC41KSAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3RhbF9kcmF3aW5nX2hpdCArIHRvdGFsX2RyYXdpbmdfbWlzcyArIDEpKSkgJT4lCiAgbXV0YXRlKCJ6X3RvdGFsX2RyYXdpbmdfRkEiID0gcW5vcm0oKHRvdGFsX2RyYXdpbmdfRkEgKyAwLjUpIC8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG90YWxfZHJhd2luZ19GQSArIHRvdGFsX2RyYXdpbmdfQ1IgKyAxKSkpICU+JSAgICAKICBtdXRhdGUoInpfdG90YWxfcGhvdG9faGl0IiA9IHFub3JtKCh0b3RhbF9waG90b19oaXQgKyAwLjUpIC8gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3RhbF9waG90b19oaXQgKyB0b3RhbF9waG90b19taXNzICsgMSkpKSAlPiUKICBtdXRhdGUoInpfdG90YWxfcGhvdG9fRkEiID0gcW5vcm0oKHRvdGFsX3Bob3RvX0ZBICsgMC41KSAvIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b3RhbF9waG90b19GQSArIHRvdGFsX3Bob3RvX0NSICsgMSkpKSAlPiUKICAjIyAgV29yZCBhY2N1cmFjeToKICBtdXRhdGUod29yZF9hY2N1cmFjeV9yZWNfcmF3ID0gd29yZF9oaXRfcmVjIC8gKHdvcmRfaGl0X3JlYyArIHdvcmRfRkFfcmVjKSkgJT4lCiAgbXV0YXRlKHdvcmRfYWNjdXJhY3lfZmFtX3JhdyA9IHdvcmRfaGl0X2ZhbSAvICh3b3JkX2hpdF9mYW0gKyB3b3JkX0ZBX2ZhbSkpICU+JQogIG11dGF0ZSh3b3JkX2FjY3VyYWN5X2JvdGhfcmF3ID0gd29yZF9oaXRfYm90aCAvICh3b3JkX2hpdF9ib3RoICsgd29yZF9GQV9ib3RoKSkgJT4lCiAgbXV0YXRlKHdvcmRfYWNjdXJhY3lfZ3Vlc3NpbmdfcmF3ID0gd29yZF9oaXRfZ3Vlc3MgLyAod29yZF9oaXRfZ3Vlc3MgKyB3b3JkX0ZBX2d1ZXNzKSkgJT4lCiAgIyMgIERyYXdpbmcgYWNjdXJhY3k6CiAgbXV0YXRlKGRyYXdpbmdfYWNjdXJhY3lfcmVjX3JhdyA9IGRyYXdpbmdfaGl0X3JlYyAvIChkcmF3aW5nX2hpdF9yZWMgKyBkcmF3aW5nX0ZBX3JlYykpICU+JQogIG11dGF0ZShkcmF3aW5nX2FjY3VyYWN5X2ZhbV9yYXcgPSBkcmF3aW5nX2hpdF9mYW0gLyAoZHJhd2luZ19oaXRfZmFtICsgZHJhd2luZ19GQV9mYW0pKSAlPiUKICBtdXRhdGUoZHJhd2luZ19hY2N1cmFjeV9ib3RoX3JhdyA9IGRyYXdpbmdfaGl0X2JvdGggLyAoZHJhd2luZ19oaXRfYm90aCArIGRyYXdpbmdfRkFfYm90aCkpICU+JQogIG11dGF0ZShkcmF3aW5nX2FjY3VyYWN5X2d1ZXNzaW5nX3JhdyA9IGRyYXdpbmdfaGl0X2d1ZXNzIC8gKGRyYXdpbmdfaGl0X2d1ZXNzICsgZHJhd2luZ19GQV9ndWVzcykpICU+JQogICMjICBQaG90byBhY2N1cmFjeToKICBtdXRhdGUocGhvdG9fYWNjdXJhY3lfcmVjX3JhdyA9IHBob3RvX2hpdF9yZWMgLyAocGhvdG9faGl0X3JlYyArIHBob3RvX0ZBX3JlYykpICU+JQogIG11dGF0ZShwaG90b19hY2N1cmFjeV9mYW1fcmF3ID0gcGhvdG9faGl0X2ZhbSAvIChwaG90b19oaXRfZmFtICsgcGhvdG9fRkFfZmFtKSkgJT4lCiAgbXV0YXRlKHBob3RvX2FjY3VyYWN5X2JvdGhfcmF3ID0gcGhvdG9faGl0X2JvdGggLyAocGhvdG9faGl0X2JvdGggKyBwaG90b19GQV9ib3RoKSkgJT4lCiAgbXV0YXRlKHBob3RvX2FjY3VyYWN5X2d1ZXNzaW5nX3JhdyA9IHBob3RvX2hpdF9ndWVzcyAvIChwaG90b19oaXRfZ3Vlc3MgKyBwaG90b19GQV9ndWVzcykpCiMjICBSRkcgYWNjdXJhY3kgKGhhdmUgdG8gY3JlYXRlIHNlcGVyYXRlIGRmcyB0byBjYWxjdWxhdGUsIHRoZW4gcmVqb2luIHdpdGggJ2V4cDNhbmQ0X190ZXN0X3N0YXRzJzoKZXhwM2FuZDRfX3JmZ19hY2N1cmFjeV90b3RhbHMgPC0gZXhwM2FuZDRfX3Rlc3Rfc3RhdHMgJT4lCiAgZmlsdGVyKHJlc3Bfb3B0aW9uID09ICJyZmciKSAlPiUKICBtdXRhdGUocGhvdG9fYWNjdXJhY3lfcmVjX3RvdGFsID0gcGhvdG9fYWNjdXJhY3lfcmVjX3JhdykgJT4lCiAgbXV0YXRlKHBob3RvX2FjY3VyYWN5X2ZhbV90b3RhbCA9IHBob3RvX2FjY3VyYWN5X2ZhbV9yYXcpICU+JQogIG11dGF0ZShkcmF3aW5nX2FjY3VyYWN5X3JlY190b3RhbCA9IGRyYXdpbmdfYWNjdXJhY3lfcmVjX3JhdykgJT4lCiAgbXV0YXRlKGRyYXdpbmdfYWNjdXJhY3lfZmFtX3RvdGFsID0gZHJhd2luZ19hY2N1cmFjeV9mYW1fcmF3KSAlPiUKICBtdXRhdGUod29yZF9hY2N1cmFjeV9yZWNfdG90YWwgPSB3b3JkX2FjY3VyYWN5X3JlY19yYXcpICU+JQogIG11dGF0ZSh3b3JkX2FjY3VyYWN5X2ZhbV90b3RhbCA9IHdvcmRfYWNjdXJhY3lfZmFtX3JhdykgJT4lCiAgc2VsZWN0KGlkLCBwaG90b19hY2N1cmFjeV9yZWNfdG90YWwsIHBob3RvX2FjY3VyYWN5X2ZhbV90b3RhbCwgCiAgICAgICAgIGRyYXdpbmdfYWNjdXJhY3lfcmVjX3RvdGFsLCBkcmF3aW5nX2FjY3VyYWN5X2ZhbV90b3RhbCwKICAgICAgICAgd29yZF9hY2N1cmFjeV9yZWNfdG90YWwsIHdvcmRfYWNjdXJhY3lfZmFtX3RvdGFsKQojIyAgUkZCRyBhY2N1cmFjeSB0b3RhbHM6CmV4cDNhbmQ0X19yZmJnX2FjY3VyYWN5X3RvdGFscyA8LSBleHAzYW5kNF9fdGVzdF9zdGF0cyAlPiUKICBmaWx0ZXIocmVzcF9vcHRpb24gPT0gInJmYmciKSAlPiUKICBtdXRhdGUocGhvdG9fYWNjdXJhY3lfcmVjX3RvdGFsID0gKHBob3RvX2hpdF9yZWMgKyBwaG90b19oaXRfYm90aCkgLyAKICAgICAgICAgICAocGhvdG9faGl0X3JlYyArIHBob3RvX2hpdF9ib3RoICsgcGhvdG9fRkFfcmVjICsgcGhvdG9fRkFfYm90aCkpICU+JQogIG11dGF0ZShwaG90b19hY2N1cmFjeV9mYW1fdG90YWwgPSAocGhvdG9faGl0X2ZhbSArIHBob3RvX2hpdF9ib3RoKSAvCiAgICAgICAgICAgKHBob3RvX2hpdF9mYW0gKyBwaG90b19oaXRfYm90aCArIHBob3RvX0ZBX2ZhbSArIHBob3RvX0ZBX2JvdGgpKSAlPiUKICBtdXRhdGUoZHJhd2luZ19hY2N1cmFjeV9yZWNfdG90YWwgPSAoZHJhd2luZ19oaXRfcmVjICsgZHJhd2luZ19oaXRfYm90aCkgLyAKICAgICAgICAgICAoZHJhd2luZ19oaXRfcmVjICsgZHJhd2luZ19oaXRfYm90aCArIGRyYXdpbmdfRkFfcmVjICsgZHJhd2luZ19GQV9ib3RoKSkgJT4lCiAgbXV0YXRlKGRyYXdpbmdfYWNjdXJhY3lfZmFtX3RvdGFsID0gKGRyYXdpbmdfaGl0X2ZhbSArIGRyYXdpbmdfaGl0X2JvdGgpIC8KICAgICAgICAgICAoZHJhd2luZ19oaXRfZmFtICsgZHJhd2luZ19oaXRfYm90aCArIGRyYXdpbmdfRkFfZmFtICsgZHJhd2luZ19GQV9ib3RoKSkgJT4lCiAgbXV0YXRlKHdvcmRfYWNjdXJhY3lfcmVjX3RvdGFsID0gKHdvcmRfaGl0X3JlYyArIHdvcmRfaGl0X2JvdGgpIC8gCiAgICAgICAgICAgKHdvcmRfaGl0X3JlYyArIHdvcmRfaGl0X2JvdGggKyB3b3JkX0ZBX3JlYyArIHdvcmRfRkFfYm90aCkpICU+JQogIG11dGF0ZSh3b3JkX2FjY3VyYWN5X2ZhbV90b3RhbCA9ICh3b3JkX2hpdF9mYW0gKyB3b3JkX2hpdF9ib3RoKSAvCiAgICAgICAgICAgKHdvcmRfaGl0X2ZhbSArIHdvcmRfaGl0X2JvdGggKyB3b3JkX0ZBX2ZhbSArIHdvcmRfRkFfYm90aCkpICU+JQogIHNlbGVjdChpZCwgcGhvdG9fYWNjdXJhY3lfcmVjX3RvdGFsLCBwaG90b19hY2N1cmFjeV9mYW1fdG90YWwsIGRyYXdpbmdfYWNjdXJhY3lfcmVjX3RvdGFsLAogICAgICAgICBkcmF3aW5nX2FjY3VyYWN5X2ZhbV90b3RhbCwgd29yZF9hY2N1cmFjeV9yZWNfdG90YWwsIHdvcmRfYWNjdXJhY3lfZmFtX3RvdGFsKQojIyAgSm9pbiBhY2N1cmFjeSB0b3RhbHMgdG9nZXRoZXIsIGFuZCBhZGQgdG8gImdyZXlfY2FsY3VsYXRpb25zIiBkZjogCmV4cDNhbmQ0X19hY2N1cmFjeV90b3RhbHMgPC0gYmluZF9yb3dzKGV4cDNhbmQ0X19yZmdfYWNjdXJhY3lfdG90YWxzLCBleHAzYW5kNF9fcmZiZ19hY2N1cmFjeV90b3RhbHMpCmV4cDNhbmQ0X190ZXN0X3N0YXRzIDwtIGV4cDNhbmQ0X190ZXN0X3N0YXRzICU+JQogIHJpZ2h0X2pvaW4oZXhwM2FuZDRfX2FjY3VyYWN5X3RvdGFscykgJT4lCiAgIyMgIGQncHJpbWUgKGNhbGN1bGF0ZWQgaW4gdGhlIHNhbWUgd2F5IGFzIHdlIGRpZCBwcmV2aW91c2x5IGluIEV4Y2VsKToKICBtdXRhdGUoIm9sZF93b3JkX2RfcHJpbWUiID0gel90b3RhbF93b3JkX2hpdCAtIHpfdG90YWxfd29yZF9GQSkgJT4lCiAgbXV0YXRlKCJvbGRfZHJhd2luZ19kX3ByaW1lIiA9IHpfdG90YWxfZHJhd2luZ19oaXQgLSB6X3RvdGFsX2RyYXdpbmdfRkEpICU+JQogIG11dGF0ZSgib2xkX3Bob3RvX2RfcHJpbWUiID0gel90b3RhbF9waG90b19oaXQgLSB6X3RvdGFsX3Bob3RvX0ZBKQojIyAgZCdwcmltZSAoY2FsY3VsYXRlZCBieSBSIHBhY2thZ2UpOgojIExpc3QgdW5pcXVlIHBhcnRpY2lwYW50IElEcyB0byBsb29wIHRocm91Z2g6CmV4cDNhbmQ0X19wYXJ0aWNpcGFudF9JRHMgPC0gdW5pcXVlKGV4cDNhbmQ0X190ZXN0X3N0YXRzJGlkKQojIyAgd29yZCBkJ3ByaW1lIChjYWxjdWxhdGVkIGJ5IFIgcGFja2FnZSk6CiMgQ3JlYXRlIGVtcHR5IGRmIHRvIHN0b3JlIHdvcmQgZHByaW1lIGNhbGN1bGF0aW9uczoKZXhwM2FuZDRfX3dvcmRfZF9wcmltZSA8LSB0aWJibGUoKQojIEluaXRpYXRlIGZvciBsb29wIHRoYXQgaXRlcmF0ZXMgdGhyb3VnaCBleHAzYW5kNF9fcGFydGljaXBhbnRfSURzOgpmb3IgKGkgaW4gZXhwM2FuZDRfX3BhcnRpY2lwYW50X0lEcykgewogICMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRmICh0aGF0IGdldHMgb3ZlcndyaXR0ZW4gZWFjaCB0aW1lIHRoZSBsb29wIGl0ZXJhdGVzKSwgd2l0aCBkYXRhIGZyb20gCiAgIyAiZXhwM2FuZDRfX3Rlc3Rfc3RhdHMiOgogIGV4cDNhbmQ0X190ZW1wIDwtIGV4cDNhbmQ0X190ZXN0X3N0YXRzICU+JQogICAgIyBGaWx0ZXIgImdyZXlfY2FsY3VsYXRpb25zIiBkYXRhIGJ5IHRoZSBjdXJyZW50bHkgaXRlcmF0ZWQgcGFydGljaXBhbnQgaWQ6CiAgICBmaWx0ZXIoaWQgPT0gaSkgJT4lICAgICAKICAgICMgU2VsZWN0IG9ubHkgdGhlIGNvbHVtbnMgbmVjZXNzYXJ5IGZvciBkcHJpbWUgY2FsY3VsYXRpb25zOgogICAgc2VsZWN0KGlkLCB0b3RhbF93b3JkX2hpdCwgdG90YWxfd29yZF9GQSwgdG90YWxfd29yZF9taXNzLCB0b3RhbF93b3JkX0NSKQogIAogIGV4cDNhbmQ0X190ZW1wX2RfcHJpbWUgPC0gKGFzX3RpYmJsZShkcHJpbWUobl9oaXQgPSBleHAzYW5kNF9fdGVtcCR0b3RhbF93b3JkX2hpdCwgICAgIyMgIEdldCBudW1iZXIgb2YgaGl0czsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2ZhID0gZXhwM2FuZDRfX3RlbXAkdG90YWxfd29yZF9GQSwgICAgICAjIyAgR2V0IG51bWJlciBvZiBGQXM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9taXNzID0gZXhwM2FuZDRfX3RlbXAkdG90YWxfd29yZF9taXNzLCAgIyMgIEdldCBudW1iZXIgb2YgbWlzc2VzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fY3IgPSBleHAzYW5kNF9fdGVtcCR0b3RhbF93b3JkX0NSLCAgICAgICMjICBHZXQgbnVtYmVyIG9mIENSczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3RhcmdldHMgPSA2MywgICAgICAgICAgICAgICAgICMjICBBbHdheXMgNjM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9kaXN0cmFjdG9ycyA9IDYzLCAgICAgICAgICAgICAjIyAgQWx3YXlzIDYzOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdGVkID0gVFJVRSkpKSAlPiUgICAgICAgICAgIyMgIEFkanVzdG1lbnRzIGZvciBleHRyZW1lIHZhbHVlcyAKICAgICMjICBhcmUgbWFkZSBmb2xsb3dpbmcgdGhlIAogICAgIyMgIHJlY29tbWVuZGF0aW9ucyBvZkhhdXR1cygxOTk1KS4KICAgIG11dGF0ZSgiaWQiID0gaSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyAgQWRkIGN1cnJlbnQgcGFydGljaXBhbnQgSUQgdG8gImV4cDNhbmQ0X190ZW1wX2RfcHJpbWUiCiAgZXhwM2FuZDRfX3RlbXAgPC0gZXhwM2FuZDRfX3RlbXAgJT4lIGlubmVyX2pvaW4oZXhwM2FuZDRfX3RlbXBfZF9wcmltZSwgYnkgPSAiaWQiKSAgICAgICMjICBqb2luICJleHAzYW5kNF9fdGVtcCIgYW5kICJleHAzYW5kNF9fdGVtcF9kX3ByaW1lIiBieSBpZCBpbnRvIG9uZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMgIGRmIC8gc2luZ2xlIHJvdy4KICBleHAzYW5kNF9fd29yZF9kX3ByaW1lIDwtIGJpbmRfcm93cyhleHAzYW5kNF9fd29yZF9kX3ByaW1lLCBleHAzYW5kNF9fdGVtcCkgfSAgICAgICAgICAgIyMgIEFkZCB0aGlzIHJvdyB0byB0aGUgImV4cDNhbmQ0X193b3JkX2RfcHJpbWUiIGRmLiBMb29wIAojIyAgYWdhaW4sIHVudGlsIHdlJ3ZlIGdvbmUgdGhyb3VnaCBlYWNoIFAuIAojIyAgQWRkaXRpb25hbCB0aWR5aW5nOiAgICAgCmV4cDNhbmQ0X193b3JkX2RfcHJpbWUgPC0gZXhwM2FuZDRfX3dvcmRfZF9wcmltZSAlPiUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgc2VsZWN0KGlkLCBkcHJpbWUsIGJldGEsIGFwcmltZSwgYnBwZCwgYykgJT4lICAgICAgICAgICAgICAgICAgICAgICAjIyAgU2VsZWN0IG9ubHkgdGhlIG5ldyBjb2x1bW5zLiAKICByZW5hbWUod29yZF9kX3ByaW1lID0gImRwcmltZSIsIHdvcmRfYmV0YSA9ICJiZXRhIiwgICAgICAgICAgICAgICAgICMjICBSZW5hbWUgdGhlc2UgY29sdW1ucyB0byAgCiAgICAgICAgIHdvcmRfYV9wcmltZSA9ICJhcHJpbWUiLCB3b3JkX2JwcGQgPSAiYnBwZCIsIHdvcmRfYyA9ICJjIikgICAjIyAgcmVmbGVjdCB0aGUgc3RpbSBmb3JtYXQuIAoKIyMgIERyYXdpbmcgZCdwcmltZSAoY2FsY3VsYXRlZCBieSBSIHBhY2thZ2UpOgpleHAzYW5kNF9fZHJhd2luZ19kX3ByaW1lIDwtIHRpYmJsZSgpCmZvciAoaSBpbiBleHAzYW5kNF9fcGFydGljaXBhbnRfSURzKSB7CiAgZXhwM2FuZDRfX3RlbXAgPC0gZXhwM2FuZDRfX3Rlc3Rfc3RhdHMgJT4lCiAgICBmaWx0ZXIoaWQgPT0gaSkgJT4lCiAgICBzZWxlY3QoaWQsIHRvdGFsX2RyYXdpbmdfaGl0LCB0b3RhbF9kcmF3aW5nX0ZBLCB0b3RhbF9kcmF3aW5nX21pc3MsIHRvdGFsX2RyYXdpbmdfQ1IpCiAgZXhwM2FuZDRfX3RlbXBfZF9wcmltZSA8LSAoYXNfdGliYmxlKGRwcmltZShuX2hpdCA9IGV4cDNhbmQ0X190ZW1wJHRvdGFsX2RyYXdpbmdfaGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZmEgPSBleHAzYW5kNF9fdGVtcCR0b3RhbF9kcmF3aW5nX0ZBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fbWlzcyA9IGV4cDNhbmQ0X190ZW1wJHRvdGFsX2RyYXdpbmdfbWlzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2NyID0gZXhwM2FuZDRfX3RlbXAkdG90YWxfZHJhd2luZ19DUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX3RhcmdldHMgPSA2MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuX2Rpc3RyYWN0b3JzID0gNjMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ZWQgPSBUUlVFKSkpICU+JQogICAgbXV0YXRlKCJpZCIgPSBpKQogIGV4cDNhbmQ0X190ZW1wIDwtIGV4cDNhbmQ0X190ZW1wICU+JSBpbm5lcl9qb2luKGV4cDNhbmQ0X190ZW1wX2RfcHJpbWUsIGJ5ID0gImlkIikKICBleHAzYW5kNF9fZHJhd2luZ19kX3ByaW1lIDwtIGJpbmRfcm93cyhleHAzYW5kNF9fZHJhd2luZ19kX3ByaW1lLCBleHAzYW5kNF9fdGVtcCkgfQojIyAgQWRkaXRpb25hbCB0aWR5aW5nOgpleHAzYW5kNF9fZHJhd2luZ19kX3ByaW1lIDwtIGV4cDNhbmQ0X19kcmF3aW5nX2RfcHJpbWUgJT4lCiAgc2VsZWN0KGlkLCBkcHJpbWUsIGJldGEsIGFwcmltZSwgYnBwZCwgYykgJT4lCiAgcmVuYW1lKGRyYXdpbmdfZF9wcmltZSA9ICJkcHJpbWUiLCBkcmF3aW5nX2JldGEgPSAiYmV0YSIsIGRyYXdpbmdfYV9wcmltZSA9ICJhcHJpbWUiLAogICAgICAgICBkcmF3aW5nX2JwcGQgPSAiYnBwZCIsIGRyYXdpbmdfYyA9ICJjIikKCiMjICBQaG90byBkJ3ByaW1lIChjYWxjdWxhdGVkIGJ5IFIgcGFja2FnZSk6CmV4cDNhbmQ0X19waG90b19kX3ByaW1lIDwtIHRpYmJsZSgpCmZvciAoaSBpbiBleHAzYW5kNF9fcGFydGljaXBhbnRfSURzKSB7CiAgZXhwM2FuZDRfX3RlbXAgPC0gZXhwM2FuZDRfX3Rlc3Rfc3RhdHMgJT4lCiAgICBmaWx0ZXIoaWQgPT0gaSkgJT4lCiAgICBzZWxlY3QoaWQsIHRvdGFsX3Bob3RvX2hpdCwgdG90YWxfcGhvdG9fRkEsIHRvdGFsX3Bob3RvX21pc3MsIHRvdGFsX3Bob3RvX0NSKQogIGV4cDNhbmQ0X190ZW1wX2RfcHJpbWUgPC0gKGFzX3RpYmJsZShkcHJpbWUobl9oaXQgPSBleHAzYW5kNF9fdGVtcCR0b3RhbF9waG90b19oaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9mYSA9IGV4cDNhbmQ0X190ZW1wJHRvdGFsX3Bob3RvX0ZBLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fbWlzcyA9IGV4cDNhbmQ0X190ZW1wJHRvdGFsX3Bob3RvX21pc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbl9jciA9IGV4cDNhbmQ0X190ZW1wJHRvdGFsX3Bob3RvX0NSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fdGFyZ2V0cyA9IDYzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5fZGlzdHJhY3RvcnMgPSA2MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3RlZCA9IFRSVUUpKSkgJT4lCiAgICBtdXRhdGUoImlkIiA9IGkpCiAgZXhwM2FuZDRfX3RlbXAgPC0gZXhwM2FuZDRfX3RlbXAgJT4lIGlubmVyX2pvaW4oZXhwM2FuZDRfX3RlbXBfZF9wcmltZSwgYnkgPSAiaWQiKQogIGV4cDNhbmQ0X19waG90b19kX3ByaW1lIDwtIGJpbmRfcm93cyhleHAzYW5kNF9fcGhvdG9fZF9wcmltZSwgZXhwM2FuZDRfX3RlbXApIH0KIyMgIEFkZGl0aW9uYWwgdGlkeWluZzoKZXhwM2FuZDRfX3Bob3RvX2RfcHJpbWUgPC0gZXhwM2FuZDRfX3Bob3RvX2RfcHJpbWUgJT4lCiAgc2VsZWN0KGlkLCBkcHJpbWUsIGJldGEsIGFwcmltZSwgYnBwZCwgYykgJT4lCiAgcmVuYW1lKHBob3RvX2RfcHJpbWUgPSAiZHByaW1lIiwgcGhvdG9fYmV0YSA9ICJiZXRhIiwgcGhvdG9fYV9wcmltZSA9ICJhcHJpbWUiLAogICAgICAgICBwaG90b19icHBkID0gImJwcGQiLCBwaG90b19jID0gImMiKQoKIyMgIEFkZCBuZXcgZCdwcmltZSBjYWxjdWxhdGlvbnMgdG8gJ2V4cDNhbmQ0X190ZXN0X3N0YXRzJyBkZjogCmV4cDNhbmQ0X190ZXN0X3N0YXRzIDwtIGV4cDNhbmQ0X190ZXN0X3N0YXRzICU+JQogIHJpZ2h0X2pvaW4oZXhwM2FuZDRfX3dvcmRfZF9wcmltZSkgJT4lCiAgcmlnaHRfam9pbihleHAzYW5kNF9fZHJhd2luZ19kX3ByaW1lKSAlPiUKICByaWdodF9qb2luKGV4cDNhbmQ0X19waG90b19kX3ByaW1lKQoKIyMgIE1lcmdlICdleHAzYW5kNF9fcGFydGljaXBhbnRfaW5mbycgYW5kICdleHAzYW5kNF9fdGVzdF9zdGF0cycgdG8gY3JlYXRlIGZpbmFsIHRpZHkgZGY6IApleHAzYW5kNF9fZmluYWxfZGF0YSA8LSBleHAzYW5kNF9fcGFydGljaXBhbnRfaW5mbyAlPiUKICByaWdodF9qb2luKGV4cDNhbmQ0X190ZXN0X3N0YXRzKSAlPiUKICBhcnJhbmdlKGNvbF9vcl9ncmV5LCByZXNwX29wdGlvbiwgcHJvbGlmaWNfaWQsIHN0dWR5X2xpc3QsIHRlc3RfbGlzdCkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgQXBwbHkgZXhjbHVzaW9uIGNyaXRlcmlhOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIEFueW9uZSB3aXRoIGxlc3MgdGhhbiA5MCUgdG93YXJkIGVuY29kaW5nIHF1ZXN0aW9uczoKZXhwM2FuZDRfX2V4Y2x1ZGUxIDwtIGV4cDNhbmQ0X19maW5hbF9kYXRhICU+JQogIGZpbHRlcihzdHVkeV9jb3JyZWN0X3BlcmNlbnQgPCA5MCkKIyMgIEFueW9uZSArIG9yIC0gMy4wIHotc2NvcmUgZm9yIHRvdGFsIGhpdHM6CmV4cDNhbmQ0X19leGNsdWRlMiA8LSBleHAzYW5kNF9fZmluYWxfZGF0YSAlPiUKICBtdXRhdGUoInpfdG90YWxfaGl0IiA9IHFub3JtKCh0b3RhbF9oaXRzICsgMC41KSAvICh0b3RhbF9oaXRzICsgdG90YWxfbWlzcyArIDEpKSkgJT4lCiAgZmlsdGVyKHpfdG90YWxfaGl0ID49IDMuMCB8IHpfdG90YWxfaGl0IDw9IC0zLjApCiMjICBBbnlvbmUgKyBvciAtIDMuMCB6LXNjb3JlIGZvciB0b3RhbCBGQXM6CmV4cDNhbmQ0X19leGNsdWRlMyA8LSBleHAzYW5kNF9fZmluYWxfZGF0YSAlPiUKICBtdXRhdGUoInpfdG90YWxfRkEiID0gcW5vcm0oKHRvdGFsX0ZBICsgMC41KSAvICh0b3RhbF9GQSArIHRvdGFsX0NSICsgMSkpKSAlPiUKICBmaWx0ZXIoel90b3RhbF9GQSA+PSAzLjAgfCB6X3RvdGFsX0ZBIDw9IC0zLjApCiMjICBBbnlvbmUgKyBvciAtIDMuMCB6LXNjb3JlIGZvciB0b3RhbCByZWNvZ25pdGlvbjoKZXhwM2FuZDRfX2V4Y2x1ZGU0IDwtIGV4cDNhbmQ0X19maW5hbF9kYXRhICU+JQogIG11dGF0ZSgicHJvcF90b3RhbF9oaXQiID0gdG90YWxfaGl0cyAvICh0b3RhbF9oaXRzICsgdG90YWxfbWlzcykpICU+JQogIG11dGF0ZSgicHJvcF90b3RhbF9GQSIgPSB0b3RhbF9GQSAvICh0b3RhbF9GQSArIHRvdGFsX0NSKSkgJT4lCiAgbXV0YXRlKCJ0b3RhbF9yZWNvZyIgPSBwcm9wX3RvdGFsX2hpdCAtIHByb3BfdG90YWxfRkEpICU+JQogIG11dGF0ZSgiel9yZWNvZyIgPSAodG90YWxfcmVjb2cgLSBtZWFuKHRvdGFsX3JlY29nKSkgLyBzZCh0b3RhbF9yZWNvZykpICU+JQogIGZpbHRlcih6X3JlY29nID49IDMuMCB8IHpfcmVjb2cgPD0gLTMuMCkKIyMgIEpvaW4gYWxsIHRvLWJlLWV4Y2x1ZGVkIHBhcnRpY2lwYW50cyBpbnRvIHNpbmdsZSBkZjoKZXhwM2FuZDRfX2FsbF9leGNsdWRlIDwtIGV4cDNhbmQ0X19leGNsdWRlMSAlPiUKICBiaW5kX3Jvd3MoZXhwM2FuZDRfX2V4Y2x1ZGUyLCBleHAzYW5kNF9fZXhjbHVkZTMsIGV4cDNhbmQ0X19leGNsdWRlNCkKIyMgIEp1c3QgZ2V0IHRoZSBpZCdzIGZvciB0aGUgdG8tYmUtZXhjbHVkZWQgcGFydGljaXBhbnRzOgpleHAzYW5kNF9fcF90b19leGNsdWRlIDwtIGV4cDNhbmQ0X19hbGxfZXhjbHVkZSRpZAojIyAgUmVtb3ZlIHRoZXNlIHBhcnRpY2lwYW50cyBmcm9tICdleHAzYW5kNF9fZmluYWxfZGF0YSc6CmV4cDNhbmQ0X19maW5hbF9kYXRhIDwtIGV4cDNhbmQ0X19maW5hbF9kYXRhICU+JQogIGZpbHRlcighaWQgJWluJSBleHAzYW5kNF9fcF90b19leGNsdWRlKSAlPiUKICBtdXRhdGUocmVzcF9vcHRpb24gPSB0b3VwcGVyKHJlc3Bfb3B0aW9uKSkgJT4lCiAgbXV0YXRlKGFnZSA9IG5hX2lmKGFnZSwgMCkpCiMjICAgIEV4cGVyaW1lbnQgMyAoZ3JleSk6CmV4cDNfX2dyZXlfZGF0YSA8LSBleHAzYW5kNF9fZmluYWxfZGF0YSAlPiUKICBmaWx0ZXIoY29sX29yX2dyZXkgPT0gImdyZXkiKQojIyAgICBFeHBlcmltZW50IDQgKGNvbG91cik6CmV4cDRfX2NvbG91cl9kYXRhIDwtIGV4cDNhbmQ0X19maW5hbF9kYXRhICU+JQogIGZpbHRlcihjb2xfb3JfZ3JleSA9PSAiY29sIikKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgUmVhY3Rpb24gdGltZXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKZXhwM2FuZDRfX3JlYWN0aW9uX3RpbWVzIDwtIGV4cDNhbmQ0X190ZXN0X2RhdGEgJT4lCiAgc2VsZWN0KGlkLCBydCkgJT4lCiAgbXV0YXRlKHJ0ID0gYXMuZG91YmxlKHJ0KSkgJT4lCiAgbXV0YXRlKG1lYW4gPSBtZWFuKHJ0KSkgJT4lCiAgZGlzdGluY3QoaWQsIG1lYW4pICU+JQogIHJlbmFtZShydCA9ICJtZWFuIikgJT4lCiAgbXV0YXRlKHJ0ID0gcm91bmQocnQsIGRpZ2l0cz0tMSkpCgpnZ3Bsb3QoZXhwM2FuZDRfX3JlYWN0aW9uX3RpbWVzLCBhZXMocnQpKSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHg9cnQsIHk9Li5kZW5zaXR5Li4pLCBiaW5zPTIwKSArCiAgc3RhdF9mdW5jdGlvbihmdW49ZG5vcm0sIGFyZ3MgPSBsaXN0KG1lYW49bWVhbihleHAzYW5kNF9fcmVhY3Rpb25fdGltZXMkcnQpLCBzZD1zZChleHAzYW5kNF9fcmVhY3Rpb25fdGltZXMkcnQpKSwgY29sb3I9InJlZCIpCmBgYAoKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyIDwtIGV4cDNfX2dyZXlfZGF0YSAlPiUKICAgICAgc2VsZWN0KGFnZSwgZ2VuZGVyKSAlPiUKICAgICAgbXV0YXRlKGFnZSA9IGFzLmRvdWJsZShhZ2UpKQoKICBleHAzX19ncmV5X2FnZV9nZW5kZXJfdGFibGUgPC0gdHJpYmJsZSgKICAgICAgfiJHZW5kZXIiLCB+TiwgfkFnZSwgflNELAogICAgICAiRmVtYWxlIiwKICAgICAgICAgICAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyICU+JSBmaWx0ZXIoZ2VuZGVyID09ICJmZW1hbGUiKSAlPiUgbnJvdygpLAogICAgICAgICAgICBleHAzX19ncmV5X2FnZV9nZW5kZXIgJT4lIGZpbHRlcihnZW5kZXIgPT0gImZlbWFsZSIpICU+JSBzdW1tYXJpc2UobWVhbihhZ2UpKSAlPiUgcHVsbCgpICU+JSByb3VuZCAoMiksCiAgICAgICAgICAgIGV4cDNfX2dyZXlfYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAiZmVtYWxlIikgJT4lIHN1bW1hcmlzZShzZChhZ2UpKSAlPiUgcHVsbCgpICU+JSByb3VuZCAoMiksCiAgICAgICJNYWxlIiwKICAgICAgICAgICAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyICU+JSBmaWx0ZXIoZ2VuZGVyID09ICJtYWxlIikgJT4lIG5yb3coKSwKICAgICAgICAgICAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyICU+JSBmaWx0ZXIoZ2VuZGVyID09ICJtYWxlIikgJT4lIHN1bW1hcmlzZShtZWFuKGFnZSkpICU+JSBwdWxsKCkgJT4lIHJvdW5kICgyKSwKICAgICAgICAgICAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyICU+JSBmaWx0ZXIoZ2VuZGVyID09ICJtYWxlIikgJT4lIHN1bW1hcmlzZShzZChhZ2UpKSAlPiUgcHVsbCgpICU+JSByb3VuZCAoMiksCiAgICAgICJRdWVzdGlvbmluZyIsCiAgICAgICAgICAgIGV4cDNfX2dyZXlfYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAicXVlc3Rpb25pbmciKSAlPiUgbnJvdygpLAogICAgICAgICAgICBleHAzX19ncmV5X2FnZV9nZW5kZXIgJT4lIGZpbHRlcihnZW5kZXIgPT0gInF1ZXN0aW9uaW5nIikgJT4lIHN1bW1hcmlzZShtZWFuKGFnZSkpICU+JSBwdWxsKCksCiAgICAgICAgICAgIDAsCiAgICAgICJVbnNwZWNpZmllZCIsCiAgICAgICAgICAgIGV4cDNfX2dyZXlfYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAidW5zcGVjaWZpZWQiKSAlPiUgbnJvdygpLAogICAgICAgICAgICBleHAzX19ncmV5X2FnZV9nZW5kZXIgJT4lIGZpbHRlcihnZW5kZXIgPT0gInVuc3BlY2lmaWVkIikgJT4lIHN1bW1hcmlzZShtZWFuKGFnZSkpICU+JSBwdWxsKCksCiAgICAgICAgICAgIGV4cDNfX2dyZXlfYWdlX2dlbmRlciAlPiUgZmlsdGVyKGdlbmRlciA9PSAidW5zcGVjaWZpZWQiKSAlPiUgc3VtbWFyaXNlKHNkKGFnZSkpICU+JSBwdWxsKCkgJT4lIHJvdW5kICgyKSwKICAgICAgIlRvdGFsIiwKICAgICAgICAgICAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyICU+JSBucm93KCksCiAgICAgICAgICAgIGV4cDNfX2dyZXlfYWdlX2dlbmRlciAlPiUgc3VtbWFyaXNlKG1lYW4oYWdlKSkgJT4lIHB1bGwoKSAlPiUgcm91bmQgKDIpLAogICAgICAgICAgICBleHAzX19ncmV5X2FnZV9nZW5kZXIgJT4lIHN1bW1hcmlzZShzZChhZ2UpKSAlPiUgcHVsbCgpICU+JSByb3VuZCAoMikpCgogICAgZXhwM19fZ3JleV9wYXJ0aWNpcGFudF9zb3VyY2UgPC0gYXNfdGliYmxlKGV4cDNfX2dyZXlfZGF0YSRwcm9saWZpY19pZCkKICAgIGV4cDNfX2dyZXlfcGFydGljaXBhbnRfc291cmNlIDwtIGV4cDNfX2dyZXlfcGFydGljaXBhbnRfc291cmNlICU+JQogICAgICAgIG11dGF0ZShsZW5ndGggPSBzdHJfbGVuZ3RoKHZhbHVlKSkgJT4lCiAgICAgICAgbXV0YXRlKHNvdXJjZSA9IGlmZWxzZShsZW5ndGggPT0gNCwgInNvbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsZW5ndGggPT0gNSwgInNvbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGxlbmd0aCA9PSA2LCAic29uYSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsZW5ndGggPT0gOCwgImhhbm92ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmZWxzZShsZW5ndGggPT0gMjQsICJwcm9saWZpYyIsIHZhbHVlKSkpKSkpCiAgICAKICAgIGV4cDNfX2dyZXlfbl9wcm9saWZpYyA8LSBucm93KGV4cDNfX2dyZXlfcGFydGljaXBhbnRfc291cmNlICU+JSBmaWx0ZXIoc291cmNlID09ICJwcm9saWZpYyIpKQogICAgZXhwM19fZ3JleV9uX3Byb2xpZmljIDwtIHJvdW5kKChleHAzX19ncmV5X25fcHJvbGlmaWMgLyBucm93KGV4cDNfX2dyZXlfcGFydGljaXBhbnRfc291cmNlKSkgKiAxMDAsIDIpCiAgICAKICAgIGV4cDNfX2dyZXlfbl9zb25hIDwtIG5yb3coZXhwM19fZ3JleV9wYXJ0aWNpcGFudF9zb3VyY2UgJT4lIGZpbHRlcihzb3VyY2UgPT0gInNvbmEiKSkKICAgIGV4cDNfX2dyZXlfbl9zb25hIDwtIHJvdW5kKChleHAzX19ncmV5X25fc29uYSAvIG5yb3coZXhwM19fZ3JleV9wYXJ0aWNpcGFudF9zb3VyY2UpKSAqIDEwMCwgMikKICAgIAogICAgZXhwM19fZ3JleV9uX2hhbm92ZXIgPC0gbnJvdyhleHAzX19ncmV5X3BhcnRpY2lwYW50X3NvdXJjZSAlPiUgZmlsdGVyKHNvdXJjZSA9PSAiaGFub3ZlciIpKQogICAgZXhwM19fZ3JleV9uX2hhbm92ZXIgPC0gcm91bmQoKGV4cDNfX2dyZXlfbl9oYW5vdmVyIC8gbnJvdyhleHAzX19ncmV5X3BhcnRpY2lwYW50X3NvdXJjZSkpICogMTAwLCAyKQogICAgCiAgICBleHAzX19ncmV5X25fZW5nX2xhbmcgPC0gbnJvdyhleHAzX19ncmV5X2RhdGEgJT4lIGZpbHRlcihlbmdfZmlyc3RfbGFuZyA9PSAieWVzIikpCiAgICBleHAzX19ncmV5X25fZW5nX2xhbmcgPC0gcm91bmQoKGV4cDNfX2dyZXlfbl9lbmdfbGFuZyAvIG5yb3coZXhwM19fZ3JleV9kYXRhKSkgKiAxMDAsIDIpCmBgYAoKYGBge3IgZXhwM19fYWdlLWdlbmRlci0tdGFibGVjYXB0aW9uLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgdGFibGVfbnVtYmVyaW5nKG5hbWUgPSAiZXhwM19fYWdlLWdlbmRlci0tdGFibGVjYXB0aW9uIiwgCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiR2VuZGVyIGFuZCBhZ2UgKCpTRCopIG9mIHRoZSBjdXJyZW50IHNhbXBsZS4iKQpgYGAKCiMjIE1ldGhvZAojIyMgUGFydGljaXBhbnRzCkEgdG90YWwgb2YgYHIgbnJvdyhleHAzX19ncmV5X2RhdGEpYCBzdWJqZWN0cyBjb21wbGV0ZWQgdGhlIG9ubGluZSBleHBlcmltZW50IChzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAzX19hZ2UtZ2VuZGVyLS10YWJsZWNhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWAgZm9yIGEgYnJlYWtkb3duIG9mIHRoZSBnZW5kZXIgYW5kIGFnZSBvZiB0aGUgc2FtcGxlKS4gVG8gbWVldCBvdXIgWUEgcmVxdWlyZW1lbnRzLCBhbGwgcGFydGljaXBhbnRzIHdlcmUgcmVxdWlyZWQgdG8gYmUgYmV0d2VlbiAxOC01OSB5ZWFycyBvZiBhZ2UgKGFjdHVhbCByYW5nZTogYHIgbWluKGV4cDNfX2dyZXlfZGF0YSRhZ2UsIG5hLnJtID0gVFJVRSlgLWByIG1heChleHAzX19ncmV5X2RhdGEkYWdlLCBuYS5ybSA9IFRSVUUpYCkuIEFzIG91ciBleHBlcmltZW50IGludm9sdmVkIEVuZ2xpc2ggd29yZCBzdGltdWxpLCB3ZSBhbHNvIGFza2VkIHN1YmplY3RzIHdoZXRoZXIgRW5nbGlzaCB3YXMgdGhlaXIgZmlyc3QgbGFuZ3VhZ2U7IHRoZSB2YXN0IG1ham9yaXR5IChgciBleHAzX19ncmV5X25fZW5nX2xhbmdgJSkgcmVwb3J0ZWQgdGhhdCBFbmdsaXNoIHdhcyBpbmRlZWQgdGhlaXIgZmlyc3QgbGFuZ3VhZ2UuIFN1YmplY3RzIHdlcmUgcmVjcnVpdGVkIGZyb20gdm9sdW50YXJ5IHBhcnRpY2lwYXRpb24gd2Vic2l0ZXMgc3VjaCBhcyBcaHJlZntodHRwczovL3d3dy5wcm9saWZpYy5jby99e1Byb2xpZmljIEFjYWRlbWljfSAoYHIgZXhwM19fZ3JleV9uX3Byb2xpZmljYCUpLCB3aGVyZSBwYXltZW50IGF0IHRoZSByYXRlIG9mIMKjNS9ociB3YXMgZ2l2ZW4sIGFuZCB2aWEgdGhlIGluLXNjaG9vbCBcaHJlZntodHRwczovL2tlZWxlcHN5Y2hvbG9neS5zb25hLXN5c3RlbXMuY29tL317cmVzZWFyY2ggcGFydGljaXBhdGlvbiBzeXN0ZW19IChgciBleHAzX19ncmV5X25fc29uYWAlKSwgd2hlcmUgdGhleSByZWNlaXZlZCBjb3Vyc2UgcGFydGljaXBhdGlvbiBjcmVkaXRzLiBBIHNtYWxsIG51bWJlciBvZiBwYXJ0aWNpcGFudHMgd2VyZSBhbHNvIHJlY3J1aXRlZCBmcm9tIFxocmVme2h0dHBzOi8vcHN5Y2guaGFub3Zlci5lZHUvcmVzZWFyY2gvZXhwb25uZXQuaHRtbH17UHN5Y2hvbG9naWNhbCBSZXNlYXJjaCBvbiB0aGUgTmV0fSAoYHIgZXhwM19fZ3JleV9uX2hhbm92ZXJgJSkuIEluIG9yZGVyIHRvIGRldGVjdCBhIG1lZGl1bSBlZmZlY3Qgc2l6ZSBvZiBDb2hlbuKAmXMgZiA9IDAuMjUgd2l0aCA4MCUgcG93ZXIgKGFscGhhID0gLjA1LCB0d28tdGFpbGVkKSwgRypQb3dlciBpbmRpY2F0ZWQgdGhhdCB3ZSB3b3VsZCBuZWVkIDc5IHBhcnRpY2lwYW50cyBwZXIgZ3JvdXAgKE4gPSAxNTgpIGluIGEgM3gyIG1peGVkIEFOT1ZBLgoKYHIgdGFibGVfbnVtYmVyaW5nKCJleHAzX19hZ2UtZ2VuZGVyLS10YWJsZWNhcHRpb24iKWAKYGBge3IsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiAgZXhwM19fZ3JleV9hZ2VfZ2VuZGVyX3RhYmxlICU+JQogICAgICBtdXRhdGUoQWdlID0gcm91bmQoQWdlLDIpKSAlPiUKICAgICAgbXV0YXRlKFNEID0gcm91bmQoU0QsMikpICU+JQogICAgICBtdXRhdGUoIiAiID0gc3RyX2MoIigiLCBTRCwgIikiKSkgJT4lCiAgICAgIHNlbGVjdCgtU0QpICU+JQogICAgICBrYWJsZSgibGF0ZXgiLCBib29rdGFicyA9IFQpICU+JQogICAgICBrYWJsZV9zdHlsaW5nKGxhdGV4X29wdGlvbnMgPSAiaG9sZF9wb3NpdGlvbiIpICU+JQogICAgICBjb2x1bW5fc3BlYygyLCBpdGFsaWMgPSBUUlVFKSAlPiUKICAgICAgY29sdW1uX3NwZWMoNCwgaXRhbGljID0gVFJVRSkgJT4lCiAgICAgIHJvd19zcGVjKDUsIGJvbGQgPSBUUlVFKQpgYGAKCiMjIyBNYXRlcmlhbHMKQSB0b3RhbCBvZiAxMjYgaW5ub2N1b3VzLCBldmVyeWRheSBvYmplY3RzIChlLmcuIGNsb2NrLCByYWJiaXQsIHNob2UpIHdlcmUgcHJlc2VudGVkIGFjcm9zcyB0aHJlZSBpbmRpdmlkdWFsIHN0aW11bGkgZm9ybWF0czogd3JpdHRlbiB3b3JkcywgbGluZSBkcmF3aW5ncywgYW5kIHBob3RvZ3JhcGhzLiBUaGUgbGluZSBkcmF3aW5ncyB3ZXJlIG9idGFpbmVkIGZyb20gQHJvc3Npb24yMDA0LCBhbmQgY29uc2lzdGVkIG9mIGdyZXlzY2FsZSBzaGFkZWQgaWxsdXN0cmF0aW9ucyB0aGF0IGNvbnRhaW5lZCBzb21lIHN1cmZhY2UgZGV0YWlscy4gVGhlIHdvcmQgc3RpbXVsaSB3ZXJlIHNpbXBseSB0aGUgd3JpdHRlbiB3b3JkIG5hbWVzIG9mIHRoZSBsaW5lLWRyYXduIG9iamVjdHMsIHByZXNlbnRlZCBpbiBhIGNsZWFyIFNhbnMtc2VyaWYgdHlwZWZhY2UuIFRoZSBwaG90b2dyYXBoIHN0aW11bGkgd2VyZSBjdXJhdGVkIGluIHRoZSBwcmV2aW91cyBzdHVkeTsgaGlnaCBxdWFsaXR5IHBob3RvZ3JhcGhzIHdlcmUgc291cmNlZCB0byBzaW1pbGFybHkgZGVwaWN0IHRoZSBzYW1lIGV2ZXJ5ZGF5IG9iamVjdHMgYXMgdGhlIGxpbmUgZHJhd2luZ3MuIEFsbCBvYmplY3RzIGluIHRoZSBwaG90b2dyYXBocyB3ZXJlIGlzb2xhdGVkIGZyb20gdGhlaXIgb3JpZ2luYWwgYmFja2dyb3VuZCwgY29udmVydGVkIHRvIGdyZXlzY2FsZSwgYW5kIHJvdGF0ZWQgdG8gbWF0Y2ggdGhlIG9yaWVudGF0aW9ucyBzaG93biBpbiB0aGUgbGluZS1kcmF3biBpdGVtcy4KCiMjIyBEZXNpZ24KVGhlIGN1cnJlbnQgc3R1ZHkgdXRpbGlzZWQgYSBtaXhlZCBkZXNpZ24sIHdpdGggYSAzLWxldmVsIHdpdGhpbi1zdWJqZWN0cyBmYWN0b3Igb2Ygc3RpbXVsaSBmb3JtYXQgKHdvcmRzLCBkcmF3aW5ncywgcGhvdG9ncmFwaHMpLCBhbmQgYSAyLWxldmVsIGJldHdlZW4tc3ViamVjdHMgZmFjdG9yIG9mIHJlc3BvbnNlIG9wdGlvbiAoUkZHLCBSRkJHKS4gU3ViamVjdHMgcGFzc2VkIHRocm91Z2ggMiBsZXZlbHMgb2YgYmxvY2tlZCByYW5kb21pemF0aW9uIChlcXVhbGx5IHNpemVkLCBwcmVkZXRlcm1pbmVkIGJsb2Nrcyk7IGZpcnN0LCBwYXJ0aWNpcGFudHMgd2VyZSByYW5kb21seSBhc3NpZ25lZCBvbmUgb2Ygc2l4IHBvc3NpYmxlIHN0dWR5IGxpc3RzIChvZiBlcXVhbCBsZW5ndGgsIGFuZCBjb250YWluaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIHdvcmQsIGRyYXdpbmcsIGFuZCBwaG90b2dyYXBoIGl0ZW1zKSBmb3IgY291bnRlcmJhbGFuY2luZyBwdXJwb3Nlcy4gU3ViamVjdHMgd2VyZSB0aGVuIGVpdGhlciBhc3NpZ25lZCBpbnRvIGEgcmVjb2duaXRpb24gdGVzdCB3aXRoIHRocmVlIHBvc3NpYmxlIHJlc3BvbnNlIG9wdGlvbnMgKFJGRzog4oCcUmVjb2xsZWN0aW9u4oCdLCDigJxGYW1pbGlhcml0eeKAnSzigJxHdWVzc2luZ+KAnSksIG9yIGZvdXIgcG9zc2libGUgcmVzcG9uc2Ugb3B0aW9ucyAoUkZCRzog4oCcUmVjb2xsZWN0aW9u4oCdLCDigJxGYW1pbGlhcml0eeKAnSwg4oCcR3Vlc3NpbmfigJ0sIOKAnEJvdGjigJ0pLiBUaGVzZSByYW5kb21pc2F0aW9uIHByb2Nlc3NlcyB3ZXJlIGNvbXBsZXRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBleHBlcmltZW50IHNvZnR3YXJlIHVzaW5nIGJhbGFuY2VkIG1ldGhvZHMuCgpgYGB7ciBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgZmlndXJlX251bWJlcmluZyhuYW1lID0gImV4cDNfX3N0aW11bGlfZXhhbXBsZXMiLAogICAgICAgICAgICAgICAgICAgICBjYXB0aW9uID0gIkV4YW1wbGUgc3RpbXVsaSBmcm9tIHRoZSB0aHJlZSBmb3JtYXRzLiIpCmBgYAoKJm5ic3A7CiZuYnNwOwpgYGB7ciBlY2hvPUZBTFNFLCBvdXQud2lkdGggPSAnMTAwJScsIGNhY2hlPVRSVUV9CiAgICBrbml0cjo6aW5jbHVkZV9ncmFwaGljcygiLi9yZXNvdXJjZXMvaW1hZ2VzL2V4cDMtc3RpbXVsaS1leGFtcGxlcy5wbmciKQpgYGAKJm5ic3A7CiZuYnNwOwpgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAzX19zdGltdWxpX2V4YW1wbGVzIilgCiZuYnNwOwombmJzcDsKCiMjIyBQcm9jZWR1cmUKRGF0YSB3YXMgY29sbGVjdGVkIG9ubGluZSB1c2luZyBcaHJlZntodHRwczovL2dvcmlsbGEuc2MvfXtHb3JpbGxhfSAtIGEgcGxhdGZvcm0gZm9yIHRoZSBidWlsZGluZyBhbmQgaG9zdGluZyBvZiBvbmxpbmUgZXhwZXJpbWVudHMuIFRoZSBleHBlcmltZW50IGNvbnNpc3RlZCBvZiB0aHJlZSBzZWxmLXBhY2VkIHBoYXNlczogaSkgc3R1ZHkgcGhhc2UsIGlpKSBkaXN0cmFjdG9yIHRhc2ssIGFuZCBpaWkpIHJlY29nbml0aW9uIHRlc3QuIEluIHRoZSBzdHVkeSBwaGFzZSwgYW4gZXZlbiBtaXggb2Ygd29yZCwgZHJhd2luZywgYW5kIHBob3RvZ3JhcGggc3RpbXVsaSB3ZXJlIHByZXNlbnRlZCBvbmUtYXQtYS10aW1lIG9uIHRoZSBjb21wdXRlciBzY3JlZW4uIFN1YmplY3RzIHdlcmUgaW5zdHJ1Y3RlZCB0byBsZWFybiB0aGUgaXRlbXMgaW4gcHJlcGFyYXRpb24gZm9yIGEgbGF0ZXIgbWVtb3J5IHRlc3QuIFRvIGVuc3VyZSBhdHRlbnRpb24gd2FzIGRpcmVjdGVkIHRvIHRoZSBwcmVzZW50ZWQgc3RpbXVsaSwgc3ViamVjdHMgd2VyZSByZXF1aXJlZCB0byByZXBvcnQgd2hldGhlciBlYWNoIGl0ZW0gd2FzIHNob3duIGFzIGEgd29yZCwgZHJhd2luZywgb3IgcGhvdG9ncmFwaCB1c2luZyB0aGUgY29tcHV0ZXIgbW91c2UuIEZvbGxvd2luZyB0aGUgc3R1ZHkgcGhhc2UsIHBhcnRpY2lwYW50cyBjb21wbGV0ZWQgc29tZSBzaW1wbGUgbXVsdGlwbGUgY2hvaWNlIG1hdGhlbWF0aWNhbCBxdWVzdGlvbnMgKGUuZy4gNiB4IDQgPSA/KSBhcyBhIGRpc3RyYWN0b3IuIEZpbmFsbHksIHBhcnRpY2lwYW50cyBtZW1vcnkgb2YgdGhlIHByZXZpb3VzbHkgc3R1ZGllZCBpdGVtcyB3YXMgdGVzdGluZyBpbiB0aGUgcmVjb2duaXRpb24gdGFzay4gQW4gZXZlbiBtaXggb2Ygd29yZCwgZHJhd2luZywgYW5kIHBob3RvZ3JhcGggc3RpbXVsaSB3ZXJlIGFnYWluIHByZXNlbnRlZCBvbmUtYXQtYS10aW1lIG9uIHRoZSBzY3JlZW47IGhhbGYgb2YgdGhlIHRlc3QgaXRlbXMgaGFkIGJlZW4gc2hvd24gcHJldmlvdXNseSBpbiB0aGUgc3R1ZHkgcGhhc2UsIHdoaWxlIHRoZSBvdGhlciBoYWxmIHdlcmUgbmV3IChhbmQgd2VyZSBub3Qgb24gdGhlIHN0dWR5IGxpc3QpLiBGb3IgZWFjaCBpdGVtLCBzdWJqZWN0cyB3ZXJlIGluc3RydWN0ZWQgdG8gcHJlc3MgIk9sZCIgaWYgdGhleSBiZWxpZXZlZCBpdCB3YXMgYW4gaXRlbSB0aGV5IGhhZCBzdHVkaWVkIGVhcmxpZXIsIGFuZCAiTmV3IiBpZiB0aGV5IGhhZCBub3QuICJPbGQiIHJlc3BvbnNlcyBsZWQgdG8gYSBmb2xsb3ctdXAganVkZ2VtZW50LCB3aGVyZSBwYXJ0aWNpcGFudHMgcmVwb3J0ZWQgd2hldGhlciB0aGV5IGhhZCBleHBlcmllbmNlZCByZWNvZ25pdGlvbiB0aHJvdWdoICJSZWNvbGxlY3Rpb24iLCAiRmFtaWxpYXJpdHkiLCBvciB3ZXJlIHNpbXBseSB0YWtpbmcgYW4gdW5pbmZvcm1lZCAiR3Vlc3MiLiBQYXJ0aWNpcGFudHMgdGhhdCBoYWQgYmVlbiByYW5kb21pc2VkIGludG8gdGhlIFJGQkcgdGVzdCBjb25kaXRpb24gaGFkIGEgZm91cnRoIG9wdGlvbiBoZXJlLCB3aGVyZWJ5IHRoZXkgY291bGQgcmVwb3J0IHRoYXQgdGhleSBoYWQgZXhwZXJpZW5jZWQgUmVjb2xsZWN0aW9uIGFuZCBGYW1pbGlhcml0eSBzaW11bHRhbmVvdXNseSAoIkJvdGgiKS4gU3RpbXVsaSBmb3JtYXQgd2FzIGNvbmdydWVudCBhY3Jvc3MgdGhlIHN0dWR5IGFuZCB0ZXN0IGJsb2NrcyAoZS5nLiBpdGVtcyBwcmVzZW50ZWQgYXMgcGhvdG9zIGF0IHN0dWR5IHdlcmUgYWxzbyBwcmVzZW50ZWQgYXMgcGhvdG9zIGF0IHRlc3QpLiBGb3IgZWFjaCBjb25jZXB0IGRlcGljdGVkIGFjcm9zcyB0aGUgdGhyZWUgc3RpbXVsaSBmb3JtYXRzLCBzdWJqZWN0cyB3ZXJlIG9ubHkgcHJlc2VudGVkIHdpdGggb25lIHZhcmlhdGlvbiAoaW4gb3RoZXIgd29yZHMsIGlmIGEgc3ViamVjdCBzYXcgYSBwaG90b2dyYXBoIGZvciB0aGUgaXRlbSAic2hvZSIsIHRoZXkgZGlkIG5vdCBzZWUgdGhlIHdvcmQgb3IgbGluZS1kcmF3biB2ZXJzaW9uIG9mICJzaG9lIikuIAoKIyMjIERhdGEgcHJvY2Vzc2luZwpNZWFzdXJlZCB2YXJpYWJsZXMgaW5jbHVkZWQgdGhlIHRvdGFsIG51bWJlciBvZiBoaXRzIGFuZCBGQXMsIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGhpdHMgYW5kIEZBcyBhc3NpZ25lZCB0byBlYWNoIG9mIHRoZSBhdmFpbGFibGUgcmVzcG9uc2Ugb3B0aW9ucyAoUi9GL0cgYW5kIFIvRi9CL0cpLiBJbiBvcmRlciB0byBjcmVhdGUgYSBjb21tb24gZGVwZW5kYW50IHZhcmlhYmxlLCBwcm9wb3J0aW9ucyB3ZXJlIGNhbGN1bGF0ZWQgZnJvbSB0aGVzZSB2YXJpYWJsZXMgc2xpZ2h0bHkgZGlmZmVyZW50bHkgZGVwZW5kaW5nIG9uIHRoZSByZXNwb25zZSBvcHRpb24gZ3JvdXAuIEluIHRoZSBSRkctanVkZ2VtZW50IGdyb3VwLCBzaW1wbGUgcHJvcG9ydGlvbnMgd2VyZSBjcmVhdGVkIGZyb20gdGhlIHRvdGFsIG51bWJlciBvZiBSIHJlc3BvbnNlcyBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBGIHJlc3BvbnNlcy4gSW4gdGhlIFJGQkcgY29uZGl0aW9uLCBob3dldmVyLCB0aGUgcHJvcG9ydGlvbiBvZiBCb3RoIHJlc3BvbnNlcyB3YXMgc2VwYXJhdGVseSBhZGRlZCB0byBSIHByb3BvcnRpb25zIGFuZCBGIHByb3BvcnRpb25zLiBBZGRpdGlvbmFsIERWcyBpbmNsdWRlZDogaSkgZOKAmSAoZC1wcmltZSwgYSBzaWduYWwgZGV0ZWN0aW9uIG1lYXN1cmUgb2Ygc2Vuc2l0aXZpdHkpOyBpaSkgYy12YWx1ZSAoYSBtZWFzdXJlIG9mIHJlc3BvbnNlIGJpYXMpOyBpaWkpIG92ZXJhbGwgYWNjdXJhY3kgKGhpdHMgLyAoaGl0cyArIEZBcykpOyBpdikgcmVhY3Rpb24gdGltZXMgZm9yIGFsbCByZXNwb25zZXMuCgpQYXJ0aWNpcGFudHMgd2VyZSBleGNsdWRlZCBmcm9tIGFuYWx5c2lzIGlmIHRoZXkgc2hvd2VkIHBvb3IgcGVyZm9ybWFuY2UgZHVyaW5nIHRoZSBlbmNvZGluZyB0YXNrOyB0aGUgcmVsYXRpdmUgZWFzZSBvZiByZXBvcnRpbmcgd2hldGhlciBlYWNoIGl0ZW0gd2FzIHNob3duIGFzIGEgd29yZCwgZHJhd2luZywgb3IgcGhvdG9ncmFwaCBwcm9tcHRlZCBhIHBlcmZvcm1hbmNlIGN1dCBvZmYgb2YgOTAlIGFjY3VyYWN5LiBUaGlzIGFsbG93ZWQgZm9yIHNvbWUgYWNjaWRlbnRhbCBjbGlja3MgLyBpbmNvcnJlY3QgcmVzcG9uc2VzIHRvd2FyZCBwb3RlbnRpYWxseSBhbWJpZ3VvdXMgaXRlbXMsIHRob3VnaCBzdWJqZWN0cyBzY29yaW5nIGxlc3MgdGhhbiA5MCUgd2VyZSBleGNsdWRlZCBvbiB0aGUgYXNzdW1wdGlvbiB0aGV5IGRpZCBub3QgZGVkaWNhdGUgdGhlaXIgZnVsbCBhdHRlbnRpb24gdG8gdGhlIHRhc2suIFN1YmplY3RzIHdpdGggZXh0cmVtZSB6LXNjb3JlcyB3ZXJlIGFsc28gZXhjbHVkZWQgZnJvbSBhbmFseXNpczsgdGhvc2UgcHJlc2VudGluZyB6LXNjb3JlcyBvZiArLy0gMyAoZm9yIHRvdGFsIGhpdHMsIHRvdGFsIEZBcywgb3Igb3ZlcmFsbCByZWNvZ25pdGlvbiBbaGl0cyBtaW51cyBGQXNdKSB3ZXJlIGNvbnNpZGVyZWQgb3V0bGllcnMuIFRoZXNlIGNyaXRlcmlhIHJlc3VsdGVkIGluIHRoZSBleGNsdXNpb24gb2YgMTQgZGF0YXNldHMuIAoKIyMgUmVzdWx0cwpBIHNlcmllcyBvZiAzeDIgcmVwZWF0ZWQgbWVhc3VyZXMgQU5PVkFzIHdlcmUgY29uZHVjdGVkIG9uIGVhY2ggb2YgdGhlIERWcyB1c2luZyBhIHdpdGhpbi1zdWJqZWN0cyBmYWN0b3Igb2Ygc3RpbXVsaSBmb3JtYXQgKHBob3RvZ3JhcGhzIC8gZHJhd2luZ3MgLyB3b3JkcykgYW5kIGEgYmV0d2Vlbi1zdWJqZWN0cyBmYWN0b3Igb2YgcmVzcG9uc2Ugb3B0aW9uIChSRkcgLyBSRkJHKS4gU2lnbmlmaWNhbnQgbWFpbiBlZmZlY3RzIGFuZCBpbnRlcmFjdGlvbiBlZmZlY3RzIHdlcmUgZm9sbG93ZWQtdXAgd2l0aCBCb25mZXJyb25pLWFkanVzdGVkIHBhaXJ3aXNlIGNvbXBhcmlzb25zLgoKIyMjIE92ZXJhbGwgaGl0cywgZmFsc2UgYWxhcm1zIChGQXMpLCBhbmQgcmVjb2duaXRpb24KYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgY2FjaGU9VFJVRSwgZmlnLnNob3c9J2hpZGUnfQojIyAgICBFeHBlcmltZW50IDMgLSBQcm9wIGhpdHM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojIyAgUHJlcCBkYXRhIGZvciBhbmFseXNpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfZGF0YSA8LSBleHAzX19ncmV5X2RhdGEgJT4lCiAgc2VsZWN0KGlkLCByZXNwX29wdGlvbiwgcHJvcF93b3JkX2hpdCwgcHJvcF9kcmF3aW5nX2hpdCwgcHJvcF9waG90b19oaXQpICU+JQogIHJlbmFtZSh3b3JkID0gInByb3Bfd29yZF9oaXQiLCBkcmF3aW5nID0gInByb3BfZHJhd2luZ19oaXQiLCBwaG90byA9ICJwcm9wX3Bob3RvX2hpdCIpICU+JQogIGdhdGhlcihrZXkgPSAic3RpbV9mb3JtYXQiLCB2YWx1ZSA9ICJoaXQiLCB3b3JkLCBkcmF3aW5nLCBwaG90bykgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgInJlc3Bfb3B0aW9uIiwgInN0aW1fZm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJ3b3JkIiwgIldvcmRzIikpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAiZHJhd2luZyIsICJEcmF3aW5ncyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgInBob3RvIiwgIlBob3RvZ3JhcGhzIikpICU+JQogIHRyYW5zZm9ybShzdGltX2Zvcm1hdCA9IGZhY3RvcihzdGltX2Zvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiRHJhd2luZ3MiLCJQaG90b2dyYXBocyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJlc3Bfb3B0aW9uID0gZmFjdG9yKHJlc3Bfb3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIpKSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biAyLXdheSBtaXhlZCBBTk9WQToKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUUyA8LSBhb3ZfZXooImlkIiwgImhpdCIsIGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiA9ICJyZXNwX29wdGlvbiIsIHdpdGhpbiA9ICJzdGltX2Zvcm1hdCIpCgojIyAgRm9ybWF0IEFOT1ZBIG1haW4gZWZmZWN0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFMpIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3N0aW0uZm9ybWF0Lm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUUyRmdWxsJHN0aW1fZm9ybWF0ICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3Jlc3Aub3B0aW9uLm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUUyRmdWxsJHJlc3Bfb3B0aW9uICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUUyRmdWxsJHJlc3Bfb3B0aW9uX3N0aW1fZm9ybWF0ICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojICBSdW4gcG9zdC1ob2MgY29udHJhc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIFJlc3BvbnNlLW9wdGlvbjogIE5vdCBzaWduaWZpY2FudC4KIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIFN0aW11bGkgZm9ybWF0OgpleHAzX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19zdGltLmZvcm1hdC5tZWFucyA8LSBlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFMsIH4gc3RpbV9mb3JtYXQpCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlIDwtIHBhaXJzKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3N0aW0uZm9ybWF0Lm1lYW5zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gImJvbmZlcnJvbmkiKQoKIyMgIEZvcm1hdCBwYWlyd2lzZSByZXN1bHRzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQubWVhbnMgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQubWVhbnMpIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3dvcmRzLm1lYW4gPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSRXb3JkcyAlPiUKICBzdHJfcmVtb3ZlKCJcXCwuKiIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fZHJhd2luZ3MubWVhbiA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJERyYXdpbmdzICU+JQogIHN0cl9yZW1vdmUoIlxcLC4qIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19waG90b2dyYXBocy5tZWFuIDwtIAogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQubWVhbnMkZXN0aW1hdGUkUGhvdG9ncmFwaHMgJT4lCiAgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlIDwtIAogIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlKQoKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQucGFpcndpc2UkZnVsbCRXb3Jkc19EcmF3aW5ncyAlPiUgCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX193b3Jkcy52cy5waG90b2dyYXBocy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQucGFpcndpc2UkZnVsbCRXb3Jkc19QaG90b2dyYXBocyAlPiUgCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19kcmF3aW5ncy52cy5waG90b2dyYXBocy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQucGFpcndpc2UkZnVsbCREcmF3aW5nc19QaG90b2dyYXBocyAlPiUgCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIEludGVyYWN0aW9uOiAgTm90IHNpZ25pZmljYW50LgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIyAgUHJlcCBkYXRhIGZvciBmaWd1cmU6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX2FsbC5tZWFucyA8LSBlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFMsIGMoInJlc3Bfb3B0aW9uIiwgInN0aW1fZm9ybWF0IikpCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX2ZpZ3VyZS5kYXRhIDwtIGFzX3RpYmJsZShleHAzX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19hbGwubWVhbnMpICU+JQogIHNlbGVjdCgtZGYsIC1sb3dlci5DTCwgLXVwcGVyLkNMKQoKIyMgIFByZXAgZGF0YSBmb3IgdGFibGU6ICAKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fcmZnLnRvdGFscyA8LSBleHAzX19ncmV5X2RhdGEgJT4lCiAgZmlsdGVyKHJlc3Bfb3B0aW9uID09ICJSRkciKSAlPiUKICBtdXRhdGUodG90YWxfaGl0ID0gdG90YWxfd29yZF9oaXQgKyB0b3RhbF9kcmF3aW5nX2hpdCArIHRvdGFsX3Bob3RvX2hpdCkgJT4lCiAgbXV0YXRlKHRvdGFsX0ZBID0gdG90YWxfd29yZF9GQSArIHRvdGFsX2RyYXdpbmdfRkEgKyB0b3RhbF9waG90b19GQSkKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fcmZiZy50b3RhbHMgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIGZpbHRlcihyZXNwX29wdGlvbiA9PSAiUkZCRyIpICU+JQogIG11dGF0ZSh0b3RhbF9oaXQgPSB0b3RhbF93b3JkX2hpdCArIHRvdGFsX2RyYXdpbmdfaGl0ICsgdG90YWxfcGhvdG9faGl0KSAlPiUKICBtdXRhdGUodG90YWxfRkEgPSB0b3RhbF93b3JkX0ZBICsgdG90YWxfZHJhd2luZ19GQSArIHRvdGFsX3Bob3RvX0ZBKQoKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fdGFibGUgPC0gdHJpYmJsZSgKICB+IlN0aW0iLCB+SGl0cywgIH5GQXMsCiAgIldvcmRzIiwgbWVhbihleHAzX19ncmV5X2RhdGEkcHJvcF93b3JkX2hpdCksIG1lYW4oZXhwM19fZ3JleV9kYXRhJHByb3Bfd29yZF9GQSksCiAgIkRyYXdpbmdzIiwgbWVhbihleHAzX19ncmV5X2RhdGEkcHJvcF9kcmF3aW5nX2hpdCksIG1lYW4oZXhwM19fZ3JleV9kYXRhJHByb3BfZHJhd2luZ19GQSksCiAgIlBob3RvZ3JhcGhzIiwgbWVhbihleHAzX19ncmV5X2RhdGEkcHJvcF9waG90b19oaXQpLCBtZWFuKGV4cDNfX2dyZXlfZGF0YSRwcm9wX3Bob3RvX0ZBKSwKICAiUkZHIiwgIG1lYW4oZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fcmZnLnRvdGFscyR0b3RhbF9oaXQpIC8gNjAsCiAgbWVhbihleHAzX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19yZmcudG90YWxzJHRvdGFsX0ZBKSAvIDYwLAogICJSRkJHIiwgbWVhbihleHAzX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19yZmJnLnRvdGFscyR0b3RhbF9oaXQpIC8gNjAsCiAgbWVhbihleHAzX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX19yZmJnLnRvdGFscyR0b3RhbF9GQSkgLyA2MCkgJT4lCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCAyKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gIlN0aW0iKQpgYGAKCmBgYHtyIGV4cDNfX3Byb3AtaGl0cy1hbmQtRkFzLS10YWJsZWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICB0YWJsZV9udW1iZXJpbmcobmFtZSA9ICJleHAzX19wcm9wLWhpdHMtYW5kLUZBcy0tdGFibGVjYXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJNZWFuIHByb3BvcnRpb24gb2YgaGl0cyBhbmQgRkFzIGJ5IHN0aW11bGkgZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gY29uZGl0aW9uLiIpCmBgYApTZXBhcmF0ZSAzIChzdGltdWxpIGZvcm1hdDogd29yZHMsIGRyYXdpbmdzLCBwaG90b2dyYXBocykgeCAyIChyZXNwb25zZS1vcHRpb24gY29uZGl0aW9uOiBSRkctanVkZ21lbnRzLCBSRkJHLWp1ZGdlbWVudHMpIG1peGVkIEFOT1ZBcyB3ZXJlIGNvbmR1Y3RlZCBvbiB0aGUgbWVhbiBwcm9wb3J0aW9uIG9mIGhpdHMgYW5kIGZhbHNlIGFsYXJtcyAoRkFzOyBzZWUgYHIgdGFibGVfbnVtYmVyaW5nKCJleHAzX19wcm9wLWhpdHMtYW5kLUZBcy0tdGFibGVjYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKS4KClxuZXdwYWdlCmByIHRhYmxlX251bWJlcmluZygiZXhwM19fcHJvcC1oaXRzLWFuZC1GQXMtLXRhYmxlY2FwdGlvbiIpYApgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fdGFibGUgJT4lCiAgICAgIGthYmxlKCJsYXRleCIsIGJvb2t0YWJzID0gVCkgJT4lCiAgICAgICAga2FibGVfc3R5bGluZyhsYXRleF9vcHRpb25zID0gImhvbGRfcG9zaXRpb24iKSAlPiUKICAgICAgICBwYWNrX3Jvd3MoIlN0aW11bGkgZm9ybWF0IiwgMSwgMykgJT4lCiAgICAgICAgcGFja19yb3dzKCJSZXNwb25zZSBvcHRpb24iLCA0LCA1KSAlPiUKICAgICAgICBjb2x1bW5fc3BlYygxLCB3aWR0aCA9ICI0Y20iKQpgYGAKJm5ic3A7CgpGb3IgdGhlIHByb3BvcnRpb24gb2YgdG90YWwgaGl0cywgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaSBmb3JtYXQgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3RgXS4gVGhlIGludGVyYWN0aW9uIGVmZmVjdCB3YXMgbm90IHNpZ25pZmljYW50IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0YF0uIFBvc3QtaG9jIGNvbXBhcmlzb25zIGZvciB0aGUgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaSBmb3JtYXQgc2hvd2VkIHRoYXQgcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fcGhvdG9ncmFwaHMubWVhbmApIHByb2R1Y2VkIGEgc2lnbmlmaWNhbnRseSBoaWdoZXIgcHJvcG9ydGlvbiBvZiBoaXRzIHRoYW4gYm90aCB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX193b3Jkcy5tZWFuYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fd29yZHMudnMucGhvdG9ncmFwaHMucGFpcndpc2VgXSBhbmQgZHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuSElUU19fZHJhd2luZ3MubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX2RyYXdpbmdzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlYF0uIERyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX2RyYXdpbmdzLm1lYW5gKSBhbHNvIHByb2R1Y2VkIGEgc2lnbmlmaWNhbnRseSBoaWdoZXIgcHJvcG9ydGlvbiBvZiBoaXRzIGNvbXBhcmVkIHRvIHdvcmRzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkhJVFNfX3dvcmRzLm1lYW5gKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5ISVRTX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZWBdLiAKCmBgYHtyLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGNhY2hlPVRSVUUsIGZpZy5zaG93PSdoaWRlJ30KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRXhwZXJpbWVudCAzIC0gUHJvcCBGQXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBQcmVwIGRhdGEgZm9yIGFuYWx5c2lzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQV9kYXRhIDwtIGV4cDNfX2dyZXlfZGF0YSAlPiUKICBzZWxlY3QoaWQsIHJlc3Bfb3B0aW9uLCBwcm9wX3dvcmRfRkEsIHByb3BfZHJhd2luZ19GQSwgcHJvcF9waG90b19GQSkgJT4lCiAgcmVuYW1lKHdvcmQgPSAicHJvcF93b3JkX0ZBIiwgZHJhd2luZyA9ICJwcm9wX2RyYXdpbmdfRkEiLCBwaG90byA9ICJwcm9wX3Bob3RvX0ZBIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJzdGltX2Zvcm1hdCIsIHZhbHVlID0gIkZBIiwgd29yZCwgZHJhd2luZywgcGhvdG8pICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJyZXNwX29wdGlvbiIsICJzdGltX2Zvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgImRyYXdpbmciLCAiRHJhd2luZ3MiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJwaG90byIsICJQaG90b2dyYXBocyIpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwiUGhvdG9ncmFwaHMiKSkpICU+JQogIHRyYW5zZm9ybShyZXNwX29wdGlvbiA9IGZhY3RvcihyZXNwX29wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciKSkpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMjICBSdW4gMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBIDwtIGFvdl9leigiaWQiLCAiRkEiLCBleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiA9ICJyZXNwX29wdGlvbiIsIHdpdGhpbiA9ICJzdGltX2Zvcm1hdCIpCgojIyAgRm9ybWF0IEFOT1ZBIG1haW4gZWZmZWN0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQSkgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3N0aW0uZm9ybWF0Lm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkEkZnVsbCRzdGltX2Zvcm1hdCAlPiUKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fcmVzcC5vcHRpb24ubWFpbi5lZmZlY3QgPC0gZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQSRmdWxsJHJlc3Bfb3B0aW9uICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdCA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBJGZ1bGwkcmVzcF9vcHRpb25fc3RpbV9mb3JtYXQgJT4lCiAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgIFJ1biBwb3N0LWhvYyBjb250cmFzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgIwojIyAgUmVzcG9uc2Utb3B0aW9uOiAgTm90IHNpZ25pZmljYW50LgojLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgIwojIyAgU3RpbXVsaSBmb3JtYXQ6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19zdGltLmZvcm1hdC5tZWFucyA8LSBlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBLCB+IHN0aW1fZm9ybWF0KQpleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQV9fc3RpbS5mb3JtYXQucGFpcndpc2UgPC0gcGFpcnMoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3N0aW0uZm9ybWF0Lm1lYW5zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9ICJib25mZXJyb25pIikKIyMgIEZvcm1hdCBwYWlyd2lzZSByZXN1bHRzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3N0aW0uZm9ybWF0Lm1lYW5zIDwtIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19zdGltLmZvcm1hdC5tZWFucykKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fd29yZHMubWVhbiA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSRXb3JkcyAlPiUKICBzdHJfcmVtb3ZlKCJcXCwuKiIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX2RyYXdpbmdzLm1lYW4gPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fc3RpbS5mb3JtYXQubWVhbnMkZXN0aW1hdGUkRHJhd2luZ3MgJT4lCiAgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19waG90b2dyYXBocy5tZWFuIDwtIAogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJFBob3RvZ3JhcGhzICU+JQogIHN0cl9yZW1vdmUoIlxcLC4qIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fc3RpbS5mb3JtYXQucGFpcndpc2UgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlKQoKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fd29yZHMudnMuZHJhd2luZ3MucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJFdvcmRzX0RyYXdpbmdzICU+JSAKICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX193b3Jkcy52cy5waG90b2dyYXBocy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlJGZ1bGwkV29yZHNfUGhvdG9ncmFwaHMgJT4lCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fZHJhd2luZ3MudnMucGhvdG9ncmFwaHMucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJERyYXdpbmdzX1Bob3RvZ3JhcGhzICU+JSAKICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQojLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgIwojIyAgSW50ZXJhY3Rpb246ICBOb3Qgc2lnbmlmaWNhbnQuCmBgYAoKVGhlcmUgd2FzIGFsc28gYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpIGZvcm1hdCBmb3IgdGhlIHByb3BvcnRpb24gb2YgdG90YWwgRkFzIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19zdGltLmZvcm1hdC5tYWluLmVmZmVjdGBdOyBwaG90b2dyYXBocyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fcGhvdG9ncmFwaHMubWVhbmApIHByb2R1Y2VkIGEgc2lnbmlmaWNhbnRseSBsb3dlciBwcm9wb3J0aW9uIG9mIEZBcyB0aGFuIGJvdGggCndvcmRzIChgcmV4cDNfIGFwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX3dvcmRzLm1lYW5gKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fd29yZHMudnMucGhvdG9ncmFwaHMucGFpcndpc2VgXSAKYW5kIGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19kcmF3aW5ncy5tZWFuYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFfX2RyYXdpbmdzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlYF07IGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19kcmF3aW5ncy5tZWFuYCkgcHJvZHVjZWQgYSBzaWduaWZpY2FudGx5IGxvd2VyIHByb3BvcnRpb24gb2YgRkFzIGNvbXBhcmVkIHRvIAp3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQV9fd29yZHMubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZWBdLiAgVGhlIGludGVyYWN0aW9uIGVmZmVjdCB3YXMgbm90IHNpZ25pZmljYW50IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdGBdLgoKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgY2FjaGU9VFJVRSwgZmlnLnNob3c9J2hpZGUnfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBFeHBlcmltZW50IDMgLSBSRUNPRzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyBQcmVwIGRhdGEgZm9yIGFuYWx5c2lzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZXhwM19fZ3JleV9fYW5vdmFfX1JFQ09HX2RhdGEgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIHNlbGVjdChpZCwgcmVzcF9vcHRpb24sIHdvcmRfcmVjb2csIGRyYXdpbmdfcmVjb2csIHBob3RvX3JlY29nKSAlPiUKICByZW5hbWUod29yZCA9ICJ3b3JkX3JlY29nIiwgZHJhd2luZyA9ICJkcmF3aW5nX3JlY29nIiwgcGhvdG8gPSAicGhvdG9fcmVjb2ciKSAlPiUKICBnYXRoZXIoa2V5ID0gInN0aW1fZm9ybWF0IiwgdmFsdWUgPSAicmVjb2ciLCB3b3JkLCBkcmF3aW5nLCBwaG90bykgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgInJlc3Bfb3B0aW9uIiwgInN0aW1fZm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJ3b3JkIiwgIldvcmRzIikpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAiZHJhd2luZyIsICJEcmF3aW5ncyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgInBob3RvIiwgIlBob3RvZ3JhcGhzIikpICU+JQogIHRyYW5zZm9ybShzdGltX2Zvcm1hdCA9IGZhY3RvcihzdGltX2Zvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiRHJhd2luZ3MiLCJQaG90b2dyYXBocyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJlc3Bfb3B0aW9uID0gZmFjdG9yKHJlc3Bfb3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIpKSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biAyLXdheSBtaXhlZCBBTk9WQToKZXhwM19fZ3JleV9fYW5vdmFfX1JFQ09HIDwtIGFvdl9leigiaWQiLCAicmVjb2ciLCBleHAzX19ncmV5X19hbm92YV9fUkVDT0dfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuID0gInJlc3Bfb3B0aW9uIiwgd2l0aGluID0gInN0aW1fZm9ybWF0IikKCiMjICBGb3JtYXQgQU5PVkEgbWFpbiBlZmZlY3RzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAzX19ncmV5X19hbm92YV9fUkVDT0cpIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3QgPC0gZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0ckZnVsbCRzdGltX2Zvcm1hdCAlPiUKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX3Jlc3Aub3B0aW9uLm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HJGZ1bGwkcmVzcF9vcHRpb24gJT4lCiAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdCA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPRyRmdWxsJHJlc3Bfb3B0aW9uX3N0aW1fZm9ybWF0ICU+JSBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyAgUnVuIHBvc3QtaG9jIGNvbnRyYXN0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAjCiMjICBSZXNwb25zZS1vcHRpb246ICBOb3Qgc2lnbmlmaWNhbnQuCiMtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAjCiMjICBTdGltdWxpIGZvcm1hdDoKZXhwM19fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5tZWFucyA8LSBlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19SRUNPRywgfiBzdGltX2Zvcm1hdCkKZXhwM19fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5wYWlyd2lzZSA8LSBwYWlycyhleHAzX19ncmV5X19hbm92YV9fUkVDT0dfX3N0aW0uZm9ybWF0Lm1lYW5zLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgPSAiYm9uZmVycm9uaSIpCiMjICBGb3JtYXQgcGFpcndpc2UgcmVzdWx0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19fc3RpbS5mb3JtYXQubWVhbnMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5tZWFucykKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX3dvcmRzLm1lYW4gPC0gZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJFdvcmRzICU+JQogIHN0cl9yZW1vdmUoIlxcLC4qIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX2RyYXdpbmdzLm1lYW4gPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJERyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19waG90b2dyYXBocy5tZWFuIDwtIAogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSRQaG90b2dyYXBocyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19fc3RpbS5mb3JtYXQucGFpcndpc2UgPC0gcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5wYWlyd2lzZSkKCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJFdvcmRzX0RyYXdpbmdzICU+JQogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX193b3Jkcy52cy5waG90b2dyYXBocy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJFdvcmRzX1Bob3RvZ3JhcGhzICU+JQogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19kcmF3aW5ncy52cy5waG90b2dyYXBocy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJERyYXdpbmdzX1Bob3RvZ3JhcGhzICU+JSAKICBzdHJfcmVtb3ZlKCJeKD86W15cXCRdKlxcJCl7Nn0oW15cXCRdKikiKQojLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgIwojIyAgSW50ZXJhY3Rpb246ICBOb3Qgc2lnbmlmaWNhbnQuCmBgYAoKRm9yIG92ZXJhbGwgcGVyZm9ybWFuY2UgYWNjdXJhY3ksIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHN0aW11bGkgZm9ybWF0IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3RgXS4gVGhlIGludGVyYWN0aW9uIGVmZmVjdCB3YXMgbm90IHNpZ25pZmljYW50IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19faW50ZXJhY3Rpb24ubWFpbi5lZmZlY3RgXS4gUG9zdC1ob2MgY29tcGFyaXNvbnMgZm9yIHRoZSBtYWluIGVmZmVjdCBvZiBzdGltdWxpIGZvcm1hdCBzaG93ZWQgdGhhdCAKcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19waG90b2dyYXBocy5tZWFuYCkgcHJvZHVjZWQgc2lnbmlmaWNhbnRseSBiZXR0ZXIgcGVyZm9ybWFuY2UgYWNjdXJhY3kgdGhhbiBib3RoIAp3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX3dvcmRzLm1lYW5gKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUkVDT0dfX3dvcmRzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlYF0gYW5kIGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19fZHJhd2luZ3MubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19SRUNPR19fZHJhd2luZ3MudnMucGhvdG9ncmFwaHMucGFpcndpc2VgXS4gRHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX19kcmF3aW5ncy5tZWFuYCkgYWxzbyBwcm9kdWNlZCBzaWduaWZpY2FudGx5IGJldHRlciBwZXJmb3JtYW5jZSBhY2N1cmFjeSBjb21wYXJlZCB0byAKd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX193b3Jkcy5tZWFuYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1JFQ09HX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZWBdLgoKIyMjIERpc2NyaW1pbmF0aW9uIChkJykgYW5kIHJlc3BvbnNlIGJpYXMgKGMpCmBgYHtyLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGNhY2hlPVRSVUUsIGZpZy5zaG93PSdoaWRlJ30KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRXhwZXJpbWVudCAzIC0gZCc6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIFByZXAgZGF0YSBmb3IgYW5hbHlzaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApleHAzX19ncmV5X19hbm92YV9fRC5QUklNRV9kYXRhIDwtIGV4cDNfX2dyZXlfZGF0YSAlPiUKICBzZWxlY3QoaWQsIHJlc3Bfb3B0aW9uLCB3b3JkX2RfcHJpbWUsIGRyYXdpbmdfZF9wcmltZSwgcGhvdG9fZF9wcmltZSkgJT4lCiAgcmVuYW1lKHdvcmQgPSAid29yZF9kX3ByaW1lIiwgZHJhd2luZyA9ICJkcmF3aW5nX2RfcHJpbWUiLCBwaG90byA9ICJwaG90b19kX3ByaW1lIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJzdGltX2Zvcm1hdCIsIHZhbHVlID0gImQucHJpbWUiLCB3b3JkLCBkcmF3aW5nLCBwaG90bykgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgInJlc3Bfb3B0aW9uIiwgInN0aW1fZm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJ3b3JkIiwgIldvcmRzIikpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAiZHJhd2luZyIsICJEcmF3aW5ncyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgInBob3RvIiwgIlBob3RvZ3JhcGhzIikpICU+JQogIHRyYW5zZm9ybShzdGltX2Zvcm1hdCA9IGZhY3RvcihzdGltX2Zvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiRHJhd2luZ3MiLCJQaG90b2dyYXBocyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJlc3Bfb3B0aW9uID0gZmFjdG9yKHJlc3Bfb3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIpKSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biAyLXdheSBtaXhlZCBBTk9WQToKZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUUgPC0gYW92X2V6KCJpZCIsICJkLnByaW1lIiwgZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUVfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gPSAicmVzcF9vcHRpb24iLCB3aXRoaW4gPSAic3RpbV9mb3JtYXQiKQoKIyMgIEZvcm1hdCBBTk9WQSBtYWluIGVmZmVjdHMgZm9yIHVzZSBpbiByZXBvcnQ6ICAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRSA8LSBwYXBhamE6OjphcGFfcHJpbnQuYWZleF9hb3YoZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUUpIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19zdGltLmZvcm1hdC5tYWluLmVmZmVjdCA8LSBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FJGZ1bGwkc3RpbV9mb3JtYXQgJT4lCiAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX3Jlc3Aub3B0aW9uLm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUUkZnVsbCRyZXNwX29wdGlvbiAlPiUKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWFpbi5lZmZlY3QgPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRSRmdWxsJHJlc3Bfb3B0aW9uX3N0aW1fZm9ybWF0ICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojICBSdW4gcG9zdC1ob2MgY29udHJhc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIEludGVyYWN0aW9uOgpleHAzX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMgPC0gZW1tZWFucyhleHAzX19ncmV5X19hbm92YV9fRC5QUklNRSwgfiByZXNwX29wdGlvbjpzdGltX2Zvcm1hdCkKZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLnBhaXJ3aXNlIDwtIHBhaXJzKGV4cDNfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5tZWFucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgPSAiYm9uZmVycm9uaSIpCgojIyAgRm9ybWF0IHBhaXJ3aXNlIHJlc3VsdHMgZm9yIHVzZSBpbiByZXBvcnQ6ICAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlIDwtIAogIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5wYWlyd2lzZSkKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlOiAgCmV4cDNfX2dyZXlfX0QuUFJJTUVfX2ludGVyYWN0aW9uLmZpZ3VyZS5kYXRhIDwtIGFzLnRpYmJsZShleHAzX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMpICU+JQogIHNlbGVjdCgtZGYsIC1sb3dlci5DTCwgLXVwcGVyLkNMKQojIyAgQ3JlYXRlIGxhYmVscyBmb3IgZmlndXJlIChyZXBsYWNlcyBwbG90IGxlZ2VuZCk6CmV4cDNfX2dyZXlfX0QuUFJJTUVfX2ludGVyYWN0aW9uLmZpZ3VyZS5sYWJlbHMgPC0gZXhwM19fZ3JleV9fRC5QUklNRV9faW50ZXJhY3Rpb24uZmlndXJlLmRhdGEgJT4lCiAgc2VsZWN0KHN0aW1fZm9ybWF0LCByZXNwX29wdGlvbiwgZW1tZWFuKSAlPiUKICBmaWx0ZXIoc3RpbV9mb3JtYXQgPT0gIlBob3RvZ3JhcGhzIikgJT4lCiAgbXV0YXRlKGxhYmVsID0gY2FzZV93aGVuKAogICAgcmVzcF9vcHRpb24gPT0gIlJGRyIgfiAiUkZHIiwKICAgIHJlc3Bfb3B0aW9uID09ICJSRkJHIiB+ICJSRkJHIikpICU+JQogIGdyb3VwX2J5KHN0aW1fZm9ybWF0LCByZXNwX29wdGlvbiwgbGFiZWwpCiMjICBJbnRlcmFjdGlvbiBmaWd1cmU6CmV4cDNfX2dyZXlfX0QuUFJJTUVfX2ludGVyYWN0aW9uLmZpZ3VyZSA8LSBleHAzX19ncmV5X19ELlBSSU1FX19pbnRlcmFjdGlvbi5maWd1cmUuZGF0YSAlPiUKICBnZ3Bsb3QoKSArCiAgYWVzKHggPSBzdGltX2Zvcm1hdCwgY29sb3IgPSByZXNwX29wdGlvbiwgZ3JvdXAgPSByZXNwX29wdGlvbiwgeSA9IGVtbWVhbikgKwogIHN0YXRfc3VtbWFyeShmdW4ueSA9IG1lYW4sIGdlb20gPSAicG9pbnQiLCBzaXplID0gMi40LCBzaGFwZSA9IDE1KSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55ID0gbWVhbiwgZ2VvbSA9ICJsaW5lIiwgc2l6ZSA9IDEuMikgKwogIGdlb21fdGV4dChzaXplID0gNCwgYWVzKGxhYmVsID0gbGFiZWwsIGNvbG9yID0gcmVzcF9vcHRpb24pLCBudWRnZV94ID0gMC4wOCwgaGp1c3QgPSAwLAogICAgICAgICAgICBkYXRhID0gZXhwM19fZ3JleV9fRC5QUklNRV9faW50ZXJhY3Rpb24uZmlndXJlLmxhYmVscykgKwogIHNjYWxlX2NvbG9yX21hbnVhbCh2YWx1ZXMgPSBjKCcjOGVjNmM1JywgJyM3ZDlhYjUnLCAnIzg1NjZhYScpKSArCiAgbGFicyh4ID0gIlN0aW11bGktZm9ybWF0IiwgeSA9ICJNZWFuIGQnIHNjb3JlcyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAzKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygwLCAwLjUsIDEuMCwgMS41LCAyLjAsIDIuNSwgMy4wKSwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIHZqdXN0ID0gLTQpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgdmp1c3QgPSA2KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsIGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKDIwLCAyMCwgMjQsIDMwKSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFByZXAgZGF0YSBmb3IgdGFibGU6ICAKZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX3JmZy50b3RhbHMgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIGZpbHRlcihyZXNwX29wdGlvbiA9PSAiUkZHIikgJT4lCiAgbXV0YXRlKHRvdGFsX2RfcHJpbWUgPSB3b3JkX2RfcHJpbWUgKyBkcmF3aW5nX2RfcHJpbWUgKyBwaG90b19kX3ByaW1lKSAlPiUKICBtdXRhdGUodG90YWxfYyA9IHdvcmRfYyArIGRyYXdpbmdfYyArIHBob3RvX2MpCmV4cDNfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19yZmJnLnRvdGFscyA8LSBleHAzX19ncmV5X2RhdGEgJT4lCiAgZmlsdGVyKHJlc3Bfb3B0aW9uID09ICJSRkJHIikgJT4lCiAgbXV0YXRlKHRvdGFsX2RfcHJpbWUgPSB3b3JkX2RfcHJpbWUgKyBkcmF3aW5nX2RfcHJpbWUgKyBwaG90b19kX3ByaW1lKSAlPiUKICBtdXRhdGUodG90YWxfYyA9IHdvcmRfYyArIGRyYXdpbmdfYyArIHBob3RvX2MpCgpleHAzX19ncmV5X19hbm92YV9fRC5QUklNRV9fdGFibGUgPC0gdHJpYmJsZSgKICB+IlN0aW0iLCB+ImQnIiwgIH5jLAogICJXb3JkcyIsIG1lYW4oZXhwM19fZ3JleV9kYXRhJHdvcmRfZF9wcmltZSksIG1lYW4oZXhwM19fZ3JleV9kYXRhJHdvcmRfYyksCiAgIkRyYXdpbmdzIiwgbWVhbihleHAzX19ncmV5X2RhdGEkZHJhd2luZ19kX3ByaW1lKSwgbWVhbihleHAzX19ncmV5X2RhdGEkZHJhd2luZ19jKSwKICAiUGhvdG9ncmFwaHMiLCBtZWFuKGV4cDNfX2dyZXlfZGF0YSRwaG90b19kX3ByaW1lKSwgbWVhbihleHAzX19ncmV5X2RhdGEkcGhvdG9fYyksCiAgIlJGRyIsICBtZWFuKGV4cDNfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19yZmcudG90YWxzJHRvdGFsX2RfcHJpbWUpIC8gNjAsCiAgbWVhbihleHAzX19ncmV5X19hbm92YV9fRC5QUklNRV9fcmZnLnRvdGFscyR0b3RhbF9jKSAvIDYwLAogICJSRkJHIiwgbWVhbihleHAzX19ncmV5X19hbm92YV9fRC5QUklNRV9fcmZnLnRvdGFscyR0b3RhbF9kX3ByaW1lKSAvIDYwLAogIG1lYW4oZXhwM19fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX3JmZy50b3RhbHMkdG90YWxfYykgLyA2MCkgJT4lCiAgbXV0YXRlX2lmKGlzLm51bWVyaWMsIHJvdW5kLCAyKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXModmFyID0gIlN0aW0iKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICB0YWJsZV9udW1iZXJpbmcobmFtZSA9ICJleHAzX19tZWFuLWQtYW5kLWMtLXRhYmxlY2FwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiZCcgYW5kIGMgdmFsdWVzIGJ5IHN0aW11bGkgZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gY29uZGl0aW9uLiIpCmBgYAoKVG8gYXNzZXNzIHRoZSByb2xlcyBvZiBkaXNjcmltaW5hdGlvbiBhbmQgcmVzcG9uc2UgYmlhcywgc2VwYXJhdGUgMyAoc3RpbXVsaSBmb3JtYXQ6IHdvcmRzLCBkcmF3aW5ncywgcGhvdG9ncmFwaHMpIHggMiAocmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbjogUkZHLWp1ZGdlbWVudHMsIFJGQkctanVkZ2VtZW50cykgbWl4ZWQgQU5PVkFzIHdlcmUgY29uZHVjdGVkIG9uIHRoZSB2YWx1ZXMgb2YgZOKAmSAoZC1wcmltZTsgbWVhc3VyZSBvZiBzZW5zaXRpdml0eSkgYW5kIGMgKGRlY2lzaW9uIGNyaXRlcmlvbjsgc2VlIGByIHRhYmxlX251bWJlcmluZygiZXhwM19fbWVhbi1kLWFuZC1jLS10YWJsZWNhcHRpb24iLCBkaXNwbGF5ID0gImNpdGUiKWApLgoKYHIgdGFibGVfbnVtYmVyaW5nKCJleHAzX19tZWFuLWQtYW5kLWMtLXRhYmxlY2FwdGlvbiIpYApgYGB7ciwgZWNobz1GQUxTRSwgY2FjaGU9VFJVRX0KICAgIGV4cDNfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX190YWJsZSAlPiUKICAgICAgICBrYWJsZSgibGF0ZXgiLCBib29rdGFicyA9IFQpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcobGF0ZXhfb3B0aW9ucyA9ICJob2xkX3Bvc2l0aW9uIikgJT4lCiAgICAgICAgcGFja19yb3dzKCJTdGltdWxpIGZvcm1hdCIsIDEsIDMpICU+JQogICAgICAgIHBhY2tfcm93cygiUmVzcG9uc2Ugb3B0aW9uIiwgNCwgNSkgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoMSwgd2lkdGggPSAiNGNtIikKYGBgCiZuYnNwOwoKRm9yIGQnIHNjb3JlcywgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gYmV0d2VlbiBzdGltdWxpIGZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdGBdIChzZWUgYHIgZmlndXJlX251bWJlcmluZygiZXhwM19fZ3JleV9fZHByaW1lX2ludGVyYWN0aW9uX2ZpZ3VyZV9jYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKS4gUGhvdG9ncmFwaHMKKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19QaG90b2dyYXBocyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApCmZhY2lsaXRhdGVkIGJldHRlciBkaXNjcmltaW5hdGlvbiBiZXR3ZWVuIGhpdHMgLyBGQXMgdGhhbiBib3RoIHdvcmRzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHV29yZHNfUkZHUGhvdG9ncmFwaHNgXSBhbmQgZHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19EcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdEcmF3aW5nc19SRkdQaG90b2dyYXBoc2BdIGluIHRoZSBSRkcgZ3JvdXAuIERyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBhbHNvIHNob3dlZCBzaWduaWZpY2FudGx5IGhpZ2hlciBkJyBzY29yZXMgY29tcGFyZWQgdG8gd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdXb3Jkc19SRkdEcmF3aW5nc2BdLiBJbiB0aGUgUkZCRyBncm91cCwgdGhlIHNhbWUgcGF0dGVybiB3YXMgZXZpZGVudDsgcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBmYWNpbGl0YXRlZCBiZXR0ZXIgZGlzY3JpbWluYXRpb24gdGhhbiBib3RoIHdvcmRzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGQkdXb3Jkc19SRkJHUGhvdG9ncmFwaHNgXSBhbmQgZHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZCR0RyYXdpbmdzX1JGQkdQaG90b2dyYXBoc2BdLiBBZ2FpbiwgZHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBhbHNvIHNob3dlZCBzaWduaWZpY2FudGx5IGhpZ2hlciBkJyBzY29yZXMgdGhhbiB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkJHV29yZHNfUkZHRHJhd2luZ3NgXS4KCkNvbXBhcmlzb25zIG9mIHN0aW11bGkgZm9ybWF0IGFjcm9zcyB0aGUgcmVzcG9uc2Utb3B0aW9uIGdyb3VwcyBzaG93ZWQgdGhhdCBkJyBzY29yZXMgZm9yIHBob3RvZ3JhcGhzIGRpZCBub3Qgc2lnbmlmaWNhbnRseSBkaWZmZXIgYmV0d2VlbiB0aGUgUkZHIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBhbmQgUkZCRyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19QaG90b2dyYXBocyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIGNvbmRpdGlvbnMgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR1Bob3RvZ3JhcGhzX1JGQkdQaG90b2dyYXBoc2BdLCBub3IgZm9yIGRyYXdpbmdzIChSRkc6IGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19EcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWAsIFJGQkc6IGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0QuUFJJTUVfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgLCBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHRHJhd2luZ3NfUkZCR0RyYXdpbmdzYF0sIG5vciBmb3Igd29yZHMgKFJGRzogYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCwgUkZCRzogYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fRC5QUklNRV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWAsIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19ELlBSSU1FX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdXb3Jkc19SRkJHV29yZHNgXSkuIAoKJm5ic3A7CmBgYHtyIGV4cDNfX2RwcmltZS1pbnRlcmFjdGlvbi0tZmlndXJlY2FwdGlvbiwgZWNobz1GQUxTRSwgcmVzdWx0cyA9IEZBTFNFLCBjYWNoZT1GQUxTRX0KICAgIGZpZ3VyZV9udW1iZXJpbmcobmFtZSA9ICJleHAzX19kcHJpbWUtaW50ZXJhY3Rpb24tLWZpZ3VyZWNhcHRpb24iLAogICAgICAgICAgICAgICAgICAgICBjYXB0aW9uID0gIkludGVyYWN0aW9uIHBsb3QgYmV0d2VlbiBzdGltdWxpIGZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIGZvciBkJyBzY29yZXMuIikKYGBgCgpgYGB7ciBmaWcud2lkdGg9NywgZmlnLmhlaWdodD01LjUsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiAgICBleHAzX19ncmV5X19ELlBSSU1FX19pbnRlcmFjdGlvbi5maWd1cmUKYGBgCmByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDNfX2RwcmltZS1pbnRlcmFjdGlvbi0tZmlndXJlY2FwdGlvbiIpYAoKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgY2FjaGU9VFJVRSwgZmlnLnNob3c9J2hpZGUnfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBFeHBlcmltZW50IDMgLSBjJzogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKIyMgUHJlcCBkYXRhIGZvciBhbmFseXNpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgZXhwM19fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX2RhdGEgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIHNlbGVjdChpZCwgcmVzcF9vcHRpb24sIHdvcmRfYywgZHJhd2luZ19jLCBwaG90b19jKSAlPiUKICByZW5hbWUod29yZCA9ICJ3b3JkX2MiLCBkcmF3aW5nID0gImRyYXdpbmdfYyIsIHBob3RvID0gInBob3RvX2MiKSAlPiUKICBnYXRoZXIoa2V5ID0gInN0aW1fZm9ybWF0IiwgdmFsdWUgPSAiQy5TQ09SRVMiLCB3b3JkLCBkcmF3aW5nLCBwaG90bykgJT4lCiAgbXV0YXRlX2F0KHZhcnMoImlkIiwgInJlc3Bfb3B0aW9uIiwgInN0aW1fZm9ybWF0IiksIGZhY3RvcikgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJ3b3JkIiwgIldvcmRzIikpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAiZHJhd2luZyIsICJEcmF3aW5ncyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgInBob3RvIiwgIlBob3RvZ3JhcGhzIikpICU+JQogIHRyYW5zZm9ybShzdGltX2Zvcm1hdCA9IGZhY3RvcihzdGltX2Zvcm1hdCwgbGV2ZWxzPWMoIldvcmRzIiwiRHJhd2luZ3MiLCJQaG90b2dyYXBocyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJlc3Bfb3B0aW9uID0gZmFjdG9yKHJlc3Bfb3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIpKSkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biAyLXdheSBtaXhlZCBBTk9WQToKZXhwM19fZ3JleV9fYW5vdmFfX0MuU0NPUkVTIDwtIGFvdl9leigiaWQiLCAiQy5TQ09SRVMiLCBleHAzX19ncmV5X19hbm92YV9fQy5TQ09SRVNfZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuID0gInJlc3Bfb3B0aW9uIiwgd2l0aGluID0gInN0aW1fZm9ybWF0IikKCiMjICBGb3JtYXQgQU5PVkEgbWFpbiBlZmZlY3RzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAzX19ncmV5X19hbm92YV9fQy5TQ09SRVMpIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3QgPC0gZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVMkZnVsbCRzdGltX2Zvcm1hdCAlPiUKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3Jlc3Aub3B0aW9uLm1haW4uZWZmZWN0IDwtIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTJGZ1bGwkcmVzcF9vcHRpb24gJT4lCiAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdCA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTJGZ1bGwkcmVzcF9vcHRpb25fc3RpbV9mb3JtYXQgJT4lCiAgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMgIFJ1biBwb3N0LWhvYyBjb250cmFzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgIwojIyAgUmVzcG9uc2Utb3B0aW9uOgpleHAzX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3Jlc3Aub3B0aW9uLm1lYW5zIDwtIGVtbWVhbnMoZXhwM19fZ3JleV9fYW5vdmFfX0MuU0NPUkVTLCB+IHJlc3Bfb3B0aW9uKQpleHAzX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3Jlc3Aub3B0aW9uLnBhaXJ3aXNlIDwtIHBhaXJzKGV4cDNfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fcmVzcC5vcHRpb24ubWVhbnMsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9ICJib25mZXJyb25pIikgIAojLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgLSAgIwojIyAgU3RpbXVsaSBmb3JtYXQ6CmV4cDNfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fc3RpbS5mb3JtYXQubWVhbnMgPC0gZW1tZWFucyhleHAzX19ncmV5X19hbm92YV9fQy5TQ09SRVMsIH4gc3RpbV9mb3JtYXQpCmV4cDNfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fc3RpbS5mb3JtYXQucGFpcndpc2UgPC0gcGFpcnMoZXhwM19fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19zdGltLmZvcm1hdC5tZWFucywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRqdXN0ID0gImJvbmZlcnJvbmkiKQoKIyMgIEZvcm1hdCBwYWlyd2lzZSByZXN1bHRzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19zdGltLmZvcm1hdC5tZWFucyA8LSAgICAgCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19zdGltLmZvcm1hdC5tZWFucykKZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3dvcmRzLm1lYW4gPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJFdvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19kcmF3aW5ncy5tZWFuIDwtIAogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSREcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fcGhvdG9ncmFwaHMubWVhbiA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fc3RpbS5mb3JtYXQubWVhbnMkZXN0aW1hdGUkUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlIDwtIAogIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fc3RpbS5mb3JtYXQucGFpcndpc2UpCgpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fd29yZHMudnMuZHJhd2luZ3MucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fc3RpbS5mb3JtYXQucGFpcndpc2UkZnVsbCRXb3Jkc19EcmF3aW5ncyAlPiUgCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3dvcmRzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlIDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlJGZ1bGwkV29yZHNfUGhvdG9ncmFwaHMgJT4lIAogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19kcmF3aW5ncy52cy5waG90b2dyYXBocy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJERyYXdpbmdzX1Bob3RvZ3JhcGhzICU+JQogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCiMtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAjCiMjICBJbnRlcmFjdGlvbjogIE5vdCBzaWduaWZpY2FudC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKYGBgCgpjLXNjb3JlcyBzaG93ZWQgYSBzaWduaWZpY2FudCBtYWluIGVmZmVjdCBvZiBzdGltdWxpIGZvcm1hdCBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX3N0aW0uZm9ybWF0Lm1haW4uZWZmZWN0YF0sIHdpdGggcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19waG90b2dyYXBocy5tZWFuYCkgZGVtb25zdHJhdGluZyBzaWduaWZpY2FudGx5IGxvd2VyIGMtc2NvcmVzIChhbmQgdGh1cyBhIGxlc3MgY29uc2VydmF0aXZlIHJlc3BvbnNlIGJpYXMpIHRoYW4gd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX193b3Jkcy5tZWFuYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX193b3Jkcy52cy5waG90b2dyYXBocy5wYWlyd2lzZWBdIGFuZCBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX2RyYXdpbmdzLm1lYW5gKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fQy5TQ09SRVNfX2RyYXdpbmdzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlYF0uIFBob3RvZ3JhcGhzIG1heSBoYXZlIHVuaXF1ZWx5IHByb3ZpZGVkIHN1YmplY3RzIHdpdGggYWRkaXRpb25hbCBjb25maWRlbmNlIHRoYXQgdGhlaXIgb2xkL25ldyByZXNwb25zZSB3YXMgY29ycmVjdCBpbiBjb21wYXJpc29uIHRvIHRoZSBvdGhlciBzdGltdWxpIGZvcm1hdHM7IHRoZXJlIHdhcyBubyBkaWZmZXJlbmNlIGluIGMtc2NvcmVzIGJldHdlZW4gZHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX0MuU0NPUkVTX19kcmF3aW5ncy5tZWFuYCkgYW5kIHdvcmRzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fd29yZHMubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19fd29yZHMudnMuZHJhd2luZ3MucGFpcndpc2VgXS4gVGhlcmUgd2VyZSBubyBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiBlZmZlY3RzIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19DLlNDT1JFU19faW50ZXJhY3Rpb24ubWFpbi5lZmZlY3RgXS4gCgpgYGB7ciwgZWNobz1GQUxTRSwgcmVzdWx0cyA9IEZBTFNFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBjYWNoZT1UUlVFLCBmaWcuc2hvdz0naGlkZSd9CiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFBST1AgUkVDIEhJVFM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICBQcmVwIGRhdGEgZm9yIGFuYWx5c2lzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX2RhdGEgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIHNlbGVjdChpZCwgcmVzcF9vcHRpb24sIHByb3Bfd29yZF9oaXRfcmVjX3RvdGFsLCBwcm9wX2RyYXdpbmdfaGl0X3JlY190b3RhbCwgCiAgICAgICAgIHByb3BfcGhvdG9faGl0X3JlY190b3RhbCkgJT4lCiAgcmVuYW1lKHdvcmQgPSAicHJvcF93b3JkX2hpdF9yZWNfdG90YWwiLCAKICAgICAgICAgZHJhd2luZyA9ICJwcm9wX2RyYXdpbmdfaGl0X3JlY190b3RhbCIsCiAgICAgICAgIHBob3RvID0gInByb3BfcGhvdG9faGl0X3JlY190b3RhbCIpICU+JQogIGdhdGhlcihrZXkgPSAic3RpbV9mb3JtYXQiLCB2YWx1ZSA9ICJQUk9QLlJFQy5ISVRTIiwgd29yZCwgZHJhd2luZywgcGhvdG8pICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJyZXNwX29wdGlvbiIsICJzdGltX2Zvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgImRyYXdpbmciLCAiRHJhd2luZ3MiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJwaG90byIsICJQaG90b2dyYXBocyIpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwiUGhvdG9ncmFwaHMiKSkpICU+JQogIHRyYW5zZm9ybShyZXNwX29wdGlvbiA9IGZhY3RvcihyZXNwX29wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciKSkpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMjICBSdW4gMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTIDwtIGFvdl9leigiaWQiLCAiUFJPUC5SRUMuSElUUyIsIGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuID0gInJlc3Bfb3B0aW9uIiwgd2l0aGluID0gInN0aW1fZm9ybWF0IikKCiMjICBGb3JtYXQgQU5PVkEgbWFpbiBlZmZlY3RzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFMgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTKSAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3QgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTJGZ1bGwkc3RpbV9mb3JtYXQgJT4lIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19yZXNwLm9wdGlvbi5tYWluLmVmZmVjdCA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFMkZnVsbCRyZXNwX29wdGlvbiAlPiUgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0IDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUUyRmdWxsJHJlc3Bfb3B0aW9uX3N0aW1fZm9ybWF0ICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojICBSdW4gcG9zdC1ob2MgY29udHJhc3RzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIEludGVyYWN0aW9uOgpleHAzX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMgPC0gCiAgZW1tZWFucyhleHAzX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUUywgfiByZXNwX29wdGlvbjpzdGltX2Zvcm1hdCkKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLnBhaXJ3aXNlIDwtIHBhaXJzKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9ICJib25mZXJyb25pIikKCiMjICBGb3JtYXQgcGFpcndpc2UgcmVzdWx0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyA8LSAKICBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAzX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2UgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLnBhaXJ3aXNlKQoKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlOiAgCmV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZpZ3VyZS5kYXRhIDwtIAogIGFzLnRpYmJsZShleHAzX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMpICU+JSBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKIyMgIENyZWF0ZSBsYWJlbHMgZm9yIGZpZ3VyZSAocmVwbGFjZXMgcGxvdCBsZWdlbmQpOgpleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5maWd1cmUubGFiZWxzIDwtIGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZpZ3VyZS5kYXRhICU+JQogIHNlbGVjdChzdGltX2Zvcm1hdCwgcmVzcF9vcHRpb24sIGVtbWVhbikgJT4lCiAgZmlsdGVyKHN0aW1fZm9ybWF0ID09ICJQaG90b2dyYXBocyIpICU+JQogIG11dGF0ZShsYWJlbCA9IGNhc2Vfd2hlbigKICAgIHJlc3Bfb3B0aW9uID09ICJSRkciIH4gIlJGRyIsCiAgICByZXNwX29wdGlvbiA9PSAiUkZCRyIgfiAiUkZCRyIpKSAlPiUKICBncm91cF9ieShzdGltX2Zvcm1hdCwgcmVzcF9vcHRpb24sIGxhYmVsKQojIyAgSW50ZXJhY3Rpb24gZmlndXJlOgpleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5maWd1cmUgPC0gZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24uZmlndXJlLmRhdGEgJT4lCiAgZ2dwbG90KCkgKwogIGFlcyh4ID0gc3RpbV9mb3JtYXQsIGNvbG91ciA9IHJlc3Bfb3B0aW9uLCBncm91cCA9IHJlc3Bfb3B0aW9uLCB5ID0gZW1tZWFuKSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55ID0gbWVhbiwgZ2VvbSA9ICJwb2ludCIsIHNpemUgPSAyLjQsIHNoYXBlID0gMTUpICsKICBzdGF0X3N1bW1hcnkoZnVuLnkgPSBtZWFuLCBnZW9tID0gImxpbmUiLCBzaXplID0gMS4yKSArCiAgZ2VvbV90ZXh0KHNpemUgPSA0LCBhZXMobGFiZWwgPSBsYWJlbCwgY29sb3VyID0gcmVzcF9vcHRpb24pLCBudWRnZV94ID0gMC4wOCwgaGp1c3QgPSAwLAogICAgICAgICAgICBkYXRhID0gZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24uZmlndXJlLmxhYmVscykgKwogIHNjYWxlX2NvbG91cl9tYW51YWwodmFsdWVzID0gYygnIzhlYzZjNScsICcjN2Q5YWI1JywgJyM4NTY2YWEnKSkgKwogIGxhYnMoeCA9ICJTdGltdWxpLWZvcm1hdCIsIHkgPSAiTWVhbiBwcm9wb3J0aW9uIG9mIGhpdHMgYXNzaWduZWQ6ICAnRmFtaWxpYXJpdHknIikgKwogIHNjYWxlX3lfY29udGludW91cyhsaW1pdHMgPSBjKDAsIDEpLAogICAgICAgICAgICAgICAgICAgICBicmVha3MgPSBjKDAsIDAuMTAsIDAuMjAsIDAuMzAsIDAuNDAsIDAuNTAsIDAuNjAsIDAuNzAsIDAuODAsIDAuOTAsIDEpLAogICAgICAgICAgICAgICAgICAgICBleHBhbmQgPSBjKDAsIDApKSArCiAgdGhlbWVfY2xhc3NpYygpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsCiAgICAgICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgdmp1c3QgPSAtNCksCiAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBheGlzLnRpdGxlLnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCB2anVzdCA9IDYpLAogICAgICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksCiAgICAgICAgcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KHNpemUgPSAwLjUsIGxpbmV0eXBlID0gJ3NvbGlkJywgY29sb3VyID0gImJsYWNrIiksCiAgICAgICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4oMjAsIDIwLCAyNCwgMzApKQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBQUk9QIEZBTSBISVRTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyBQcmVwIGRhdGEgZm9yIGFuYWx5c2lzOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX2RhdGEgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIHNlbGVjdChpZCwgcmVzcF9vcHRpb24sIHByb3Bfd29yZF9oaXRfZmFtX3RvdGFsLCBwcm9wX2RyYXdpbmdfaGl0X2ZhbV90b3RhbCwKICAgICAgICAgcHJvcF9waG90b19oaXRfZmFtX3RvdGFsKSAlPiUKICByZW5hbWUod29yZCA9ICJwcm9wX3dvcmRfaGl0X2ZhbV90b3RhbCIsCiAgICAgICAgIGRyYXdpbmcgPSAicHJvcF9kcmF3aW5nX2hpdF9mYW1fdG90YWwiLAogICAgICAgICBwaG90byA9ICJwcm9wX3Bob3RvX2hpdF9mYW1fdG90YWwiKSAlPiUKICBnYXRoZXIoa2V5ID0gInN0aW1fZm9ybWF0IiwgdmFsdWUgPSAiUFJPUC5GQU0uSElUUyIsIHdvcmQsIGRyYXdpbmcsIHBob3RvKSAlPiUKICBtdXRhdGVfYXQodmFycygiaWQiLCAicmVzcF9vcHRpb24iLCAic3RpbV9mb3JtYXQiKSwgZmFjdG9yKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgIndvcmQiLCAiV29yZHMiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJkcmF3aW5nIiwgIkRyYXdpbmdzIikpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAicGhvdG8iLCAiUGhvdG9ncmFwaHMiKSkgJT4lCiAgdHJhbnNmb3JtKHN0aW1fZm9ybWF0ID0gZmFjdG9yKHN0aW1fZm9ybWF0LCBsZXZlbHM9YygiV29yZHMiLCJEcmF3aW5ncyIsIlBob3RvZ3JhcGhzIikpKSAlPiUKICB0cmFuc2Zvcm0ocmVzcF9vcHRpb24gPSBmYWN0b3IocmVzcF9vcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIikpKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIyAgUnVuIDItd2F5IG1peGVkIEFOT1ZBOgpleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUUyA8LSBhb3ZfZXooImlkIiwgIlBST1AuRkFNLkhJVFMiLCBleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiA9ICJyZXNwX29wdGlvbiIsIHdpdGhpbiA9ICJzdGltX2Zvcm1hdCIpCgojIyAgRm9ybWF0IEFOT1ZBIG1haW4gZWZmZWN0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUUykgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX3N0aW0uZm9ybWF0Lm1haW4uZWZmZWN0IDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUUyRmdWxsJHN0aW1fZm9ybWF0ICU+JSBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19fcmVzcC5vcHRpb24ubWFpbi5lZmZlY3QgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTJGZ1bGwkcmVzcF9vcHRpb24gJT4lIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdCA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFMkZnVsbCRyZXNwX29wdGlvbl9zdGltX2Zvcm1hdCAlPiUgICAKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biBwb3N0LWhvYyBjb250cmFzdHM6CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMjICBJbnRlcmFjdGlvbjoKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zIDwtIAogIGVtbWVhbnMoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFMsIH4gcmVzcF9vcHRpb246c3RpbV9mb3JtYXQpCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5wYWlyd2lzZSA8LSBwYWlycyhleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGp1c3QgPSAiYm9uZmVycm9uaSIpCgojIyAgRm9ybWF0IHBhaXJ3aXNlIHJlc3VsdHMgZm9yIHVzZSBpbiByZXBvcnQ6ICAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlIDwtIAogIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5wYWlyd2lzZSkKCiMjICBQcmVwIGRhdGEgZm9yIGZpZ3VyZTogIApleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5maWd1cmUuZGF0YSA8LSAKICBhcy50aWJibGUoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zKSAlPiUgc2VsZWN0KC1kZiwgLWxvd2VyLkNMLCAtdXBwZXIuQ0wpCiMjICBDcmVhdGUgbGFiZWxzIGZvciBmaWd1cmUgKHJlcGxhY2VzIHBsb3QgbGVnZW5kKToKZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZmlndXJlLmxhYmVscyA8LSBleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5maWd1cmUuZGF0YSAlPiUKICBzZWxlY3Qoc3RpbV9mb3JtYXQsIHJlc3Bfb3B0aW9uLCBlbW1lYW4pICU+JQogIGZpbHRlcihzdGltX2Zvcm1hdCA9PSAiUGhvdG9ncmFwaHMiKSAlPiUKICBtdXRhdGUobGFiZWwgPSBjYXNlX3doZW4oCiAgICByZXNwX29wdGlvbiA9PSAiUkZHIiB+ICJSRkciLAogICAgcmVzcF9vcHRpb24gPT0gIlJGQkciIH4gIlJGQkciKSkgJT4lCiAgZ3JvdXBfYnkoc3RpbV9mb3JtYXQsIHJlc3Bfb3B0aW9uLCBsYWJlbCkKIyMgIEludGVyYWN0aW9uIGZpZ3VyZToKZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZmlndXJlIDwtIGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLmZpZ3VyZS5kYXRhICU+JQogIGdncGxvdCgpICsKICBhZXMoeCA9IHN0aW1fZm9ybWF0LCBjb2xvdXIgPSByZXNwX29wdGlvbiwgZ3JvdXAgPSByZXNwX29wdGlvbiwgeSA9IGVtbWVhbikgKwogIHN0YXRfc3VtbWFyeShmdW4ueSA9IG1lYW4sIGdlb20gPSAicG9pbnQiLCBzaXplID0gMi40LCBzaGFwZSA9IDE1KSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55ID0gbWVhbiwgZ2VvbSA9ICJsaW5lIiwgc2l6ZSA9IDEuMikgKwogIGdlb21fdGV4dChzaXplID0gNCwgYWVzKGxhYmVsID0gbGFiZWwsIGNvbG91ciA9IHJlc3Bfb3B0aW9uKSwgbnVkZ2VfeCA9IDAuMDgsIGhqdXN0ID0gMCwKICAgICAgICAgICAgZGF0YSA9IGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLmZpZ3VyZS5sYWJlbHMpICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoJyM4ZWM2YzUnLCAnIzdkOWFiNScsICcjODU2NmFhJykpICsKICBsYWJzKHggPSAiU3RpbXVsaS1mb3JtYXQiLCB5ID0gIk1lYW4gcHJvcG9ydGlvbiBvZiBoaXRzIGFzc2lnbmVkOiAgJ0ZhbWlsaWFyaXR5JyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gYygwLCAwLjEwLCAwLjIwLCAwLjMwLCAwLjQwLCAwLjUwLCAwLjYwLCAwLjcwLCAwLjgwLCAwLjkwLCAxKSwKICAgICAgICAgICAgICAgICAgICAgZXhwYW5kID0gYygwLCAwKSkgKwogIHRoZW1lX2NsYXNzaWMoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiLAogICAgICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIHZqdXN0ID0gLTQpLAogICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksCiAgICAgICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCwgdmp1c3QgPSA2KSwKICAgICAgICBheGlzLnRleHQueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsIGNvbG91ciA9ICJibGFjayIpLAogICAgICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKDIwLCAyMCwgMjQsIDMwKSkKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgUFJPUCBHVUVTUyBISVRTOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgUHJlcCBkYXRhIGZvciBhbmFseXNpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX2RhdGEgPC0gZXhwM19fZ3JleV9kYXRhICU+JQogIHNlbGVjdChpZCwgcmVzcF9vcHRpb24sIHByb3Bfd29yZF9oaXRfZ3Vlc3MsIHByb3BfZHJhd2luZ19oaXRfZ3Vlc3MsIHByb3BfcGhvdG9faGl0X2d1ZXNzKSAlPiUKICByZW5hbWUod29yZCA9ICJwcm9wX3dvcmRfaGl0X2d1ZXNzIiwKICAgICAgICAgZHJhd2luZyA9ICJwcm9wX2RyYXdpbmdfaGl0X2d1ZXNzIiwKICAgICAgICAgcGhvdG8gPSAicHJvcF9waG90b19oaXRfZ3Vlc3MiKSAlPiUKICBnYXRoZXIoa2V5ID0gInN0aW1fZm9ybWF0IiwgdmFsdWUgPSAiUFJPUC5HVUVTUy5ISVRTIiwgd29yZCwgZHJhd2luZywgcGhvdG8pICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJyZXNwX29wdGlvbiIsICJzdGltX2Zvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgImRyYXdpbmciLCAiRHJhd2luZ3MiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJwaG90byIsICJQaG90b2dyYXBocyIpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwiUGhvdG9ncmFwaHMiKSkpICU+JQogIHRyYW5zZm9ybShyZXNwX29wdGlvbiA9IGZhY3RvcihyZXNwX29wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciKSkpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMjICBSdW4gMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFMgPC0gYW92X2V6KCJpZCIsICJQUk9QLkdVRVNTLkhJVFMiLCBleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gPSAicmVzcF9vcHRpb24iLCB3aXRoaW4gPSAic3RpbV9mb3JtYXQiKQoKIyMgIEZvcm1hdCBBTk9WQSBtYWluIGVmZmVjdHMgZm9yIHVzZSBpbiByZXBvcnQ6ICAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTIDwtIHBhcGFqYTo6OmFwYV9wcmludC5hZmV4X2FvdihleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTKSAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19zdGltLmZvcm1hdC5tYWluLmVmZmVjdCA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFMkZnVsbCRzdGltX2Zvcm1hdCAlPiUgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fcmVzcC5vcHRpb24ubWFpbi5lZmZlY3QgPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTJGZ1bGwkcmVzcF9vcHRpb24gJT4lIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0IDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTJGZ1bGwkcmVzcF9vcHRpb25fc3RpbV9mb3JtYXQgJT4lIAogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIyAgUnVuIHBvc3QtaG9jIGNvbnRyYXN0czoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIFJlc3BvbnNlLW9wdGlvbjogIE5vdCBzaWduaWZpY2FudC4KIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIFN0aW11bGkgZm9ybWF0OgpleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19zdGltLmZvcm1hdC5tZWFucyA8LSBlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFMsIH4gc3RpbV9mb3JtYXQpCmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlIDwtIAogIHBhaXJzKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0Lm1lYW5zLCBhZGp1c3QgPSAiYm9uZmVycm9uaSIpCgojIyAgRm9ybWF0IHBhaXJ3aXNlIHJlc3VsdHMgZm9yIHVzZSBpbiByZXBvcnQ6ICAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19zdGltLmZvcm1hdC5tZWFucyA8LSAgIAogIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0Lm1lYW5zKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3dvcmRzLm1lYW4gPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSRXb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX2RyYXdpbmdzLm1lYW4gPC0gCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSREcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3Bob3RvZ3JhcGhzLm1lYW4gPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJFBob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fc3RpbS5mb3JtYXQucGFpcndpc2UgPC0KICBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19zdGltLmZvcm1hdC5wYWlyd2lzZSkKCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fd29yZHMudnMuZHJhd2luZ3MucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlJGZ1bGwkV29yZHNfRHJhd2luZ3MgJT4lIAogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fd29yZHMudnMucGhvdG9ncmFwaHMucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlJGZ1bGwkV29yZHNfUGhvdG9ncmFwaHMgJT4lIAogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fZHJhd2luZ3MudnMucGhvdG9ncmFwaHMucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlJGZ1bGwkRHJhd2luZ3NfUGhvdG9ncmFwaHMgJT4lCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIEludGVyYWN0aW9uOiAgTm90IHNpZ25pZmljYW50LgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBISVRTIEZJR1VSRTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgUHJlcCBkYXRhIGZvciBmaWd1cmVzOiAgCmV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhIDwtIAogIGFzLnRpYmJsZShlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTLCB+IHJlc3Bfb3B0aW9uOnN0aW1fZm9ybWF0KSkgJT4lCiAgc2VsZWN0KC1kZiwgLWxvd2VyLkNMLCAtdXBwZXIuQ0wpCmV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhIDwtIAogIGFzLnRpYmJsZShlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTLCB+IHJlc3Bfb3B0aW9uOnN0aW1fZm9ybWF0KSkgJT4lCiAgc2VsZWN0KC1kZiwgLWxvd2VyLkNMLCAtdXBwZXIuQ0wpCmV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGEgPC0gCiAgYXMudGliYmxlKGVtbWVhbnMoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUUywgfiByZXNwX29wdGlvbjpzdGltX2Zvcm1hdCkpICU+JQogIHNlbGVjdCgtZGYsIC1sb3dlci5DTCwgLXVwcGVyLkNMKQoKZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFNLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhIDwtIAogIHRyaWJibGUofiJyZXNwX29wdGlvbiIsIH4ic3RpbV9mb3JtYXQiLCB+InJmZyIsIH4iZW1tZWFuIiwgfiJTRSIsCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVsxLDFdKSksIC4uLiA9IAogICAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVsxLDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19fZmlndXJlLmRhdGFbMSwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzEsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzIsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVsyLDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19fZmlndXJlLmRhdGFbMiwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzIsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzMsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVszLDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19fZmlndXJlLmRhdGFbMywzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzMsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzQsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVs0LDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19fZmlndXJlLmRhdGFbNCwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzQsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzUsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVs1LDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19fZmlndXJlLmRhdGFbNSwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzUsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzYsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19maWd1cmUuZGF0YVs2LDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuSElUU19fZmlndXJlLmRhdGFbNiwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkhJVFNfX2ZpZ3VyZS5kYXRhWzYsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzEsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVsxLDJdKSksICJGYW1pbGlhcml0eSIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVsxLDNdKSksIAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbMSw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbMiwxXSkpLCAKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzIsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzIsM10pKSwgCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVsyLDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVszLDFdKSksIAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbMywyXSkpLCAiRmFtaWxpYXJpdHkiLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbMywzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzMsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzQsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVs0LDJdKSksICJGYW1pbGlhcml0eSIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVs0LDNdKSksIAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbNCw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbNSwxXSkpLCAKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzUsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzUsM10pKSwgCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVs1LDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5ISVRTX19maWd1cmUuZGF0YVs2LDFdKSksIAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbNiwyXSkpLCAiRmFtaWxpYXJpdHkiLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19fZmlndXJlLmRhdGFbNiwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkhJVFNfX2ZpZ3VyZS5kYXRhWzYsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbMSwxXSkpLCAKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbMSwyXSkpLCAiR3Vlc3NpbmciLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVsxLDNdKSksIAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVsxLDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzIsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzIsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbMiwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbMiw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVszLDFdKSksIAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVszLDJdKSksICJHdWVzc2luZyIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzMsM10pKSwgCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzMsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbNCwxXSkpLCAKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbNCwyXSkpLCAiR3Vlc3NpbmciLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVs0LDNdKSksIAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVs0LDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzUsMV0pKSwgCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzUsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbNSwzXSkpLCAKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuSElUU19fZmlndXJlLmRhdGFbNSw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVs2LDFdKSksIAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5ISVRTX19maWd1cmUuZGF0YVs2LDJdKSksICJHdWVzc2luZyIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzYsM10pKSwgCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkdVRVNTLkhJVFNfX2ZpZ3VyZS5kYXRhWzYsNF0pKSkgJT4lCiAgdHJhbnNmb3JtKHJlc3Bfb3B0aW9uID0gZmFjdG9yKHJlc3Bfb3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJmZyA9IGZhY3RvcihyZmcsIGxldmVscz1jKCJSZWNvbGxlY3Rpb24iLCJGYW1pbGlhcml0eSIsIkd1ZXNzaW5nIikpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwgIlBob3RvZ3JhcGhzIikpKQoKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlczogIApleHAzX19ncmV5X19QUk9QLlJFQy5GQU0uR1VFU1MuSElUU19fZmlndXJlIDwtCiAgZ2dwbG90KGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBTS5HVUVTUy5ISVRTX19maWd1cmUuZGF0YSwgYWVzKHggPSBzdGltX2Zvcm1hdCwgeSA9IGVtbWVhbiwgZmlsbCA9IHJmZykpICsKICBzY2FsZV9maWxsX21hbnVhbCgibGVnZW5kIiwgdmFsdWVzID0gYygiUmVjb2xsZWN0aW9uIiA9ICIjMUI0MjUxIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhbWlsaWFyaXR5IiA9ICIjNkE2QzkzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkd1ZXNzaW5nIiA9ICIjRDQ5MUNBIikpICsgCiAgZ2VvbV9jb2wocG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgpKSArCiAgZ2VvbV9lcnJvcmJhcihhZXMoeW1pbiA9IHBtYXgoZW1tZWFuLVNFLCAwKSwgeW1heCA9IGVtbWVhbitTRSksIAogICAgICAgICAgICAgICAgd2lkdGggPSAwLjIsIHNpemUgPSAwLjMsIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2UoMC45KSkgKwogIGZhY2V0X3dyYXAofnJlc3Bfb3B0aW9uLCBzdHJpcC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh4ID0gIlJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb24iLCB5ID0gIk1lYW4gcHJvcG9ydGlvbiBvZiBoaXRzIikgKwogIHNjYWxlX3lfY29udGludW91cyhleHBhbmQgPSBjKDAsIDApLCBsaW1pdHMgPSBjKDAsIDEpKSArCiAgdGhlbWVfY2xhc3NpYygpICsgICAgIyBSZW1vdmVzIGdyZXkgYmFja2dyb3VuZCBhbmQgZ3JpZCBsaW5lcy4gCiAgdGhlbWUoCiAgICBzdHJpcC5wbGFjZW1lbnQgPSAib3V0c2lkZSIsCiAgICBzdHJpcC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBzaXplID0gMC41LCBsaW5ldHlwZSA9ICJzb2xpZCIsIGNvbG91ciA9ICJibGFjayIpLAogICAgYXhpcy50aXRsZS54ID0gZWxlbWVudF90ZXh0KHZqdXN0PS00KSwgICAgIyBNb3ZlIHgtYXhpcyBsYWJlbCBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgZmlndXJlLgogICAgYXhpcy50aXRsZS55ID0gZWxlbWVudF90ZXh0KHZqdXN0PTYpLCAgICAgIyBNb3ZlIHktYXhpcyBsYWJlbCBmdXJ0aGVyIGF3YXkgZnJvbSB0aGUgZmlndXJlLgogICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLAogICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDkpLAogICAgbGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoZmlsbCA9ICJ3aGl0ZSIsIHNpemUgPSAwLjIsIGxpbmV0eXBlID0gInNvbGlkIiwgY29sb3VyID0gImJsYWNrIiksCiAgICBsZWdlbmQudGl0bGUgPSBlbGVtZW50X2JsYW5rKCksCiAgICBsZWdlbmQucG9zaXRpb24gPSBjKDAuNSwgMC44OTYpLAogICAgbGVnZW5kLm1hcmdpbiA9IG1hcmdpbig2LCA2LCA2LCA2KSwKICAgIGxlZ2VuZC5zcGFjaW5nLnkgPSB1bml0KC0xLCAicHQiKSwKICAgIHBsb3QuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChzaXplID0gMC41LCBsaW5ldHlwZSA9ICdzb2xpZCcsIGNvbG91ciA9ICJibGFjayIpLAogICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4oMjAsIDIwLCAyNCwgMzApKQpgYGAKCmBgYHtyIGV4cDNfX3Byb3AtcmVjLWZhbS1ndWVzcy1oaXRzLS1maWd1cmVjYXB0aW9uLCBlY2hvPUZBTFNFLCByZXN1bHRzID0gRkFMU0UsIGNhY2hlPUZBTFNFfQogICAgZmlndXJlX251bWJlcmluZyhuYW1lID0gImV4cDNfX3Byb3AtcmVjLWZhbS1ndWVzcy1oaXRzLS1maWd1cmVjYXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJQcm9wb3J0aW9uIG9mIGhpdHMgYXNzaWduZWQgUmVjb2xsZWN0aW9uLCBGYW1pbGlhcml0eSwgYW5kIEd1ZXNzaW5nLCBieSBzdGltdWxpIGZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbi4iKQpgYGAKCiMjIyBIaXRzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgRmFtaWxpYXJpdHksIGFuZCBHdWVzc2luZwpUbyBkZXRlcm1pbmUgdGhlIGVmZmVjdHMgb2Ygc3RpbXVsaSBmb3JtYXQgYW5kIHJlc3BvbnNlLW9wdGlvbiBvbiBhY2N1cmF0ZSByZWNvZ25pdGlvbiBtZW1vcnkganVkZ2VtZW50cywgc2VwYXJhdGUgMyAoc3RpbXVsaSBmb3JtYXQ6IHdvcmRzLCBkcmF3aW5ncywgcGhvdG9ncmFwaHMpIHggMiAocmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbjogUkZHLWp1ZGdlbWVudHMsIFJGQkctanVkZ2VtZW50cykgbWl4ZWQgQU5PVkFzIHdlcmUgY29uZHVjdGVkIG9uIHRoZSBtZWFuIHByb3BvcnRpb24gb2YgaGl0cyBhc3NpZ25lZCBSZWNvbGxlY3Rpb24sIEZhbWlsaWFyaXR5LCBhbmQgR3Vlc3NpbmcgKHNlZSBgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAzX19wcm9wLXJlYy1mYW0tZ3Vlc3MtaGl0cy0tZmlndXJlY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuCgpgYGB7ciBmaWcud2lkdGg9NywgZmlnLmhlaWdodD01LjUsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CmV4cDNfX2dyZXlfX1BST1AuUkVDLkZBTS5HVUVTUy5ISVRTX19maWd1cmUKYGBgCmByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDNfX3Byb3AtcmVjLWZhbS1ndWVzcy1oaXRzLS1maWd1cmVjYXB0aW9uIilgCgoKCmBgYHtyIGV4cDNfX3Byb3AtcmVjLWhpdHMtLWZpZ3VyZWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICBmaWd1cmVfbnVtYmVyaW5nKG5hbWUgPSAiZXhwM19fcHJvcC1yZWMtaGl0cy0tZmlndXJlY2FwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiSW50ZXJhY3Rpb24gcGxvdCBiZXR3ZWVuIHN0aW11bGkgZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gZm9yIHRoZSBtZWFuIAogICAgICAgICAgICAgICAgICAgICBwcm9wb3J0aW9uIG9mIGhpdHMgYXNzaWduZWQgUmVjb2xsZWN0aW9uLiIpCmBgYAoKIyMjIyBSZWNvbGxlY3Rpb24gKGhpdHMpCkZvciBoaXRzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb24gZWZmZWN0IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tYWluLmVmZmVjdGBdIChzZWUgYHIgZmlndXJlX251bWJlcmluZygiZXhwM19fcHJvcC1yZWMtaGl0cy0tZmlndXJlY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuIFBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSByZXN1bHRlZCBpbiBtb3JlIFJlY29sbGVjdGlvbiBoaXRzIHRoYW4gYm90aCB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR1dvcmRzX1JGR1Bob3RvZ3JhcGhzYF0gCmFuZCBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR0RyYXdpbmdzX1JGR1Bob3RvZ3JhcGhzYF0gaW4gdGhlIFJGRyBncm91cC4gRHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19EcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIGFsc28gcmVzdWx0ZWQgaW4gbW9yZSBSZWNvbGxlY3Rpb24gaGl0cyB0aGFuIHdvcmRzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSAKW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR1dvcmRzX1JGR0RyYXdpbmdzYF0gaW4gdGhlIFJGRyBncm91cC4gSW4gdGhlIFJGQkcgZ3JvdXAsIHRoZXJlIHdhcyBhbiBpZGVudGljYWwgcGF0dGVybjsgcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSByZXN1bHRlZCBpbiBtb3JlIFJlY29sbGVjdGlvbiBoaXRzIHRoYW4gYm90aCB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkJHV29yZHNfUkZCR1Bob3RvZ3JhcGhzYF0gYW5kIGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGQkdEcmF3aW5nc19SRkJHUGhvdG9ncmFwaHNgXS4gRHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBhbHNvIHJlc3VsdGVkIGluIG1vcmUgUmVjb2xsZWN0aW9uIGhpdHMgdGhhbiB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIApbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZCR1dvcmRzX1JGQkdEcmF3aW5nc2BdIGluIHRoZSBSRkJHIGdyb3VwLiAKQ29tcGFyaXNvbnMgb2Ygc3RpbXVsaSBmb3JtYXQgYWNyb3NzIHRoZSByZXNwb25zZS1vcHRpb24gZ3JvdXBzIHNob3dlZCBubyBkaWZmZXJlbmNlIGluIHRoZSBudW1iZXIgb2YgUmVjb2xsZWN0aW9uIGhpdHMgZm9yIHBob3RvZ3JhcGggc3RpbXVsaSBiZXR3ZWVuIHRoZSBSRkcgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19QaG90b2dyYXBocyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIGFuZCBSRkJHIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgY29uZGl0aW9ucyBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHUGhvdG9ncmFwaHNfUkZCR1Bob3RvZ3JhcGhzYF0uIFRoZSBzYW1lIHBhdHRlcm4gd2FzIGV2aWRlbnQgZm9yIGRyYXdpbmdzIChSRkc6IGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19EcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWAsIFJGQkc6IGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdEcmF3aW5nc19SRkJHRHJhd2luZ3NgXSkuIFdvcmQgc3RpbXVsaSwgaG93ZXZlciwgcHJvZHVjZWQgc2lnbmlmaWNhbnRseSBtb3JlIFJlY29sbGVjdGlvbiBoaXRzIGluIHRoZSBSRkJHIGdyb3VwIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgY29tcGFyZWQgdG8gdGhlIFJGRyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgZ3JvdXAgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR1dvcmRzX1JGQkdXb3Jkc2BdLgoKJm5ic3A7CgpgYGB7ciBmaWcud2lkdGg9NywgZmlnLmhlaWdodD01LjUsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiAgICBleHAzX19ncmV5X19QUk9QLlJFQy5ISVRTX19pbnRlcmFjdGlvbi5maWd1cmUKYGBgCmByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDNfX3Byb3AtcmVjLWhpdHMtLWZpZ3VyZWNhcHRpb24iKWAKCmBgYHtyIGV4cDNfX3Byb3AtZmFtLWhpdHMtLWZpZ3VyZWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICBmaWd1cmVfbnVtYmVyaW5nKG5hbWUgPSAiZXhwM19fcHJvcC1mYW0taGl0cy0tZmlndXJlY2FwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiSW50ZXJhY3Rpb24gcGxvdCBiZXR3ZWVuIHN0aW11bGkgZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gZm9yIHRoZSBtZWFuIAogICAgICAgICAgICAgICAgICAgICBwcm9wb3J0aW9uIG9mIGhpdHMgYXNzaWduZWQgJ0ZhbWlsaWFyaXR5Jy4iKQpgYGAKCiMjIyMgRmFtaWxpYXJpdHkgKGhpdHMpCkZvciBoaXRzIGFzc2lnbmVkIEZhbWlsaWFyaXR5LCB0aGVyZSB3YXMgYSBzaWduaWZpY2FudCBpbnRlcmFjdGlvbiBiZXR3ZWVuIHN0aW11bGkgZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0YF0gKHNlZSBgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAzX19wcm9wLWZhbS1oaXRzLS1maWd1cmVjYXB0aW9uIiwgZGlzcGxheSA9ICJjaXRlIilgKS4gV2l0aGluIHRoZSBSRkcgY29uZGl0aW9uLCB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgcmVzdWx0ZWQgaW4gbW9yZSBGYW1pbGlhcml0eSBoaXRzIHRoYW4gYm90aCBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR1dvcmRzX1JGR0RyYXdpbmdzYF0gYW5kIHBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHV29yZHNfUkZHUGhvdG9ncmFwaHNgXS4gRHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19EcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIGFsc28gcHJvZHVjZWQgbW9yZSBGYW1pbGlhcml0eSBoaXRzIGNvbXBhcmVkIHRvIHBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHRHJhd2luZ3NfUkZHUGhvdG9ncmFwaHNgXS4gCgpXaXRoaW4gdGhlIFJGQkcgY29uZGl0aW9uLCB3b3JkcyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIHN0aWxsIHByb2R1Y2VkIG1vcmUgRmFtaWxpYXJpdHkgaGl0cyB0aGFuIHBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGQkdXb3Jkc19SRkJHUGhvdG9ncmFwaHNgXS4gSG93ZXZlciwgdGhlcmUgd2FzIG5vIGRpZmZlcmVuY2UgaW4gdGhlIG51bWJlciBvZiBGYW1pbGlhcml0eSBoaXRzIHdoZW4gY29tcGFyaW5nIHdvcmRzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgdG8gZHJhd2luZ3MgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZCR1dvcmRzX1JGQkdEcmF3aW5nc2BdLiBBbm90aGVyIGRpZmZlcmVuY2UgZnJvbSB0aGUgd2l0aGluLVJGRyBmaW5kaW5ncyBpcyB0aGUgbnVtYmVyIG9mIEZhbWlsaWFyaXR5IGhpdHMgZm9yIGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgZGlkIG5vdCBkaWZmZXIgZnJvbSBwaG90b2dyYXBocyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZCR19QaG90b2dyYXBocyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWApIGluIHRoZSBSRkJHIGNvbmRpdGlvbiBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZCR0RyYXdpbmdzX1JGQkdQaG90b2dyYXBoc2BdLgoKQ29tcGFyaXNvbnMgYWNyb3NzIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb25zIHNob3dlZCB0aGF0IGRyYXdpbmdzIHByb2R1Y2VkIHNpZ25pZmljYW50bHkgbW9yZSBGYW1pbGlhcml0eSBoaXRzIGluIHRoZSBSRkJHIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgY29uZGl0aW9uIGNvbXBhcmVkIHRvIFJGRyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR0RyYXdpbmdzX1JGQkdEcmF3aW5nc2BdLiBBIHNpbWlsYXIgcGF0dGVybiB3YXMgYWxzbyBldmlkZW50IGZvciBwaG90b2dyYXBocyAoUkZHOiBgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgLCBSRkJHOiBgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHUGhvdG9ncmFwaHNfUkZCR1Bob3RvZ3JhcGhzYF0pLiBXb3JkcywgaG93ZXZlciwgc2hvd2VkIG5vIGRpZmZlcmVuY2UgaW4gdGhlIG51bWJlciBvZiBGYW1pbGlhcml0eSBoaXRzIGJldHdlZW4gdGhlIFJGRyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgYW5kIFJGQkcgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkhJVFNfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBjb25kaXRpb25zIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5ISVRTX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdXb3Jkc19SRkJHV29yZHNgXS4KCiZuYnNwOwoKYGBge3IgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9NS41LCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQogICAgZXhwM19fZ3JleV9fUFJPUC5GQU0uSElUU19faW50ZXJhY3Rpb24uZmlndXJlCmBgYApgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAzX19wcm9wLWZhbS1oaXRzLS1maWd1cmVjYXB0aW9uIilgCgojIyMjIEd1ZXNzaW5nIChoaXRzKQpGb3IgaGl0cyBhc3NpZ25lZCBHdWVzc2luZywgdGhlcmUgd2FzIGEgc2lnbmlmaWNhbnQgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaSBmb3JtYXQgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3RgXS4gVGhlIGludGVyYWN0aW9uIGVmZmVjdCB3YXMgbm90IHNpZ25pZmljYW50IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0YF0uIFBvc3QtaG9jIGNvbXBhcmlzb25zIGZvciB0aGUgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaSBmb3JtYXQgc2hvd2VkIHRoYXQgd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fd29yZHMubWVhbmApIHByb2R1Y2VkIHNpZ25pZmljYW50bHkgbW9yZSBHdWVzc2luZyBoaXRzIHRoYW4gYm90aCBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19kcmF3aW5ncy5tZWFuYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fd29yZHMudnMuZHJhd2luZ3MucGFpcndpc2VgXSBhbmQgcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuSElUU19fcGhvdG9ncmFwaHMubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3dvcmRzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlYF0uIERyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX2RyYXdpbmdzLm1lYW5gKSBhbHNvIHByb2R1Y2VkIHNpZ25pZmljYW50bHkgbW9yZSBHdWVzc2luZyBoaXRzIGNvbXBhcmVkIHRvIHBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkhJVFNfX3Bob3RvZ3JhcGhzLm1lYW5gKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5ISVRTX19kcmF3aW5ncy52cy5waG90b2dyYXBocy5wYWlyd2lzZWBdLgoKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRSwgY2FjaGU9VFJVRSwgZmlnLnNob3c9J2hpZGUnfQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgICBQUk9QIFJFQyBGQTogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIwojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIyAgUHJlcCBkYXRhIGZvciBhbmFseXNpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApleHAzX19ncmV5X19hbm92YV9fUFJPUC5SRUMuRkFfZGF0YSA8LSBleHAzX19ncmV5X2RhdGEgJT4lCiAgc2VsZWN0KGlkLCByZXNwX29wdGlvbiwgcHJvcF93b3JkX0ZBX3JlY190b3RhbCwgcHJvcF9kcmF3aW5nX0ZBX3JlY190b3RhbCwgcHJvcF9waG90b19GQV9yZWNfdG90YWwpICU+JQogIHJlbmFtZSh3b3JkID0gInByb3Bfd29yZF9GQV9yZWNfdG90YWwiLCAKICAgICAgICAgZHJhd2luZyA9ICJwcm9wX2RyYXdpbmdfRkFfcmVjX3RvdGFsIiwgCiAgICAgICAgIHBob3RvID0gInByb3BfcGhvdG9fRkFfcmVjX3RvdGFsIikgJT4lCiAgZ2F0aGVyKGtleSA9ICJzdGltX2Zvcm1hdCIsIHZhbHVlID0gIlBST1AuUkVDLkZBIiwgd29yZCwgZHJhd2luZywgcGhvdG8pICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJyZXNwX29wdGlvbiIsICJzdGltX2Zvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgImRyYXdpbmciLCAiRHJhd2luZ3MiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJwaG90byIsICJQaG90b2dyYXBocyIpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwiUGhvdG9ncmFwaHMiKSkpICU+JQogIHRyYW5zZm9ybShyZXNwX29wdGlvbiA9IGZhY3RvcihyZXNwX29wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciKSkpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMjICBSdW4gMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5GQSA8LSBhb3ZfZXooImlkIiwgIlBST1AuUkVDLkZBIiwgZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkZBX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmV0d2VlbiA9ICJyZXNwX29wdGlvbiIsIHdpdGhpbiA9ICJzdGltX2Zvcm1hdCIpCgojIyAgRm9ybWF0IEFOT1ZBIG1haW4gZWZmZWN0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5GQSA8LSBwYXBhamE6OjphcGFfcHJpbnQuYWZleF9hb3YoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkZBKSAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuRkFfX3N0aW0uZm9ybWF0Lm1haW4uZWZmZWN0IDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuRkEkZnVsbCRzdGltX2Zvcm1hdCAlPiUgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkZBX19yZXNwLm9wdGlvbi5tYWluLmVmZmVjdCA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkZBJGZ1bGwkcmVzcF9vcHRpb24gJT4lIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5GQV9faW50ZXJhY3Rpb24ubWFpbi5lZmZlY3QgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5GQSRmdWxsJHJlc3Bfb3B0aW9uX3N0aW1fZm9ybWF0ICU+JSAKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biBwb3N0LWhvYyBjb250cmFzdHM6CiMtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAjCiMjICBSZXNwb25zZS1vcHRpb246ICBOb3Qgc2lnbmlmaWNhbnQuCiMtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAjCiMjICBTdGltdWxpIGZvcm1hdDogIE5vdCBzaWduaWZpY2FudC4KIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIEludGVyYWN0aW9uOiAgTm90IHNpZ25pZmljYW50LgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgUFJPUCBGQU0gRkE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgUHJlcCBkYXRhIGZvciBhbmFseXNpczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfZGF0YSA8LSBleHAzX19ncmV5X2RhdGEgJT4lCiAgc2VsZWN0KGlkLCByZXNwX29wdGlvbiwgcHJvcF93b3JkX0ZBX2ZhbV90b3RhbCwgcHJvcF9kcmF3aW5nX0ZBX2ZhbV90b3RhbCwgcHJvcF9waG90b19GQV9mYW1fdG90YWwpICU+JQogIHJlbmFtZSh3b3JkID0gInByb3Bfd29yZF9GQV9mYW1fdG90YWwiLAogICAgICAgICBkcmF3aW5nID0gInByb3BfZHJhd2luZ19GQV9mYW1fdG90YWwiLAogICAgICAgICBwaG90byA9ICJwcm9wX3Bob3RvX0ZBX2ZhbV90b3RhbCIpICU+JQogIGdhdGhlcihrZXkgPSAic3RpbV9mb3JtYXQiLCB2YWx1ZSA9ICJQUk9QLkZBTS5GQSIsIHdvcmQsIGRyYXdpbmcsIHBob3RvKSAlPiUKICBtdXRhdGVfYXQodmFycygiaWQiLCAicmVzcF9vcHRpb24iLCAic3RpbV9mb3JtYXQiKSwgZmFjdG9yKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgIndvcmQiLCAiV29yZHMiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJkcmF3aW5nIiwgIkRyYXdpbmdzIikpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAicGhvdG8iLCAiUGhvdG9ncmFwaHMiKSkgJT4lCiAgdHJhbnNmb3JtKHN0aW1fZm9ybWF0ID0gZmFjdG9yKHN0aW1fZm9ybWF0LCBsZXZlbHM9YygiV29yZHMiLCJEcmF3aW5ncyIsIlBob3RvZ3JhcGhzIikpKSAlPiUKICB0cmFuc2Zvcm0ocmVzcF9vcHRpb24gPSBmYWN0b3IocmVzcF9vcHRpb24sIGxldmVscz1jKCJSRkciLCJSRkJHIikpKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIyAgUnVuIDItd2F5IG1peGVkIEFOT1ZBOgpleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkEgPC0gYW92X2V6KCJpZCIsICJQUk9QLkZBTS5GQSIsIGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9kYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJldHdlZW4gPSAicmVzcF9vcHRpb24iLCB3aXRoaW4gPSAic3RpbV9mb3JtYXQiKQoKIyMgIEZvcm1hdCBBTk9WQSBtYWluIGVmZmVjdHMgZm9yIHVzZSBpbiByZXBvcnQ6ICAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkEgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQSkgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19zdGltLmZvcm1hdC5tYWluLmVmZmVjdCA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBJGZ1bGwkc3RpbV9mb3JtYXQgJT4lIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9fcmVzcC5vcHRpb24ubWFpbi5lZmZlY3QgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQSRmdWxsJHJlc3Bfb3B0aW9uICU+JSBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0IDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkEkZnVsbCRyZXNwX29wdGlvbl9zdGltX2Zvcm1hdCAlPiUgICAKICBzdHJfZXh0cmFjdCgiXig/OlteXFwsXSpcXCwpezN9KFteXFwsXSopIikKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMKIyMgIFJ1biBwb3N0LWhvYyBjb250cmFzdHM6CiMjICBJbnRlcmFjdGlvbjoKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyA8LSAKICBlbW1lYW5zKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQSwgfiByZXNwX29wdGlvbjpzdGltX2Zvcm1hdCkKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5wYWlyd2lzZSA8LSBwYWlycyhleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1lYW5zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9ICJib25mZXJyb25pIikKCiMjICBGb3JtYXQgcGFpcndpc2UgcmVzdWx0cyBmb3IgdXNlIGluIHJlcG9ydDogIApleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucykKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2UgPC0gCiAgcGFwYWphOjo6YXBhX3ByaW50LmVtbUdyaWQoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5wYWlyd2lzZSkKCiMjICBQcmVwIGRhdGEgZm9yIGZpZ3VyZTogIApleHAzX19ncmV5X19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24uZmlndXJlLmRhdGEgPC0gYXMudGliYmxlKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMpICU+JQogIHNlbGVjdCgtZGYsIC1sb3dlci5DTCwgLXVwcGVyLkNMKQojIyAgQ3JlYXRlIGxhYmVscyBmb3IgZmlndXJlIChyZXBsYWNlcyBwbG90IGxlZ2VuZCk6CmV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5maWd1cmUubGFiZWxzIDwtIGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5maWd1cmUuZGF0YSAlPiUKICBzZWxlY3Qoc3RpbV9mb3JtYXQsIHJlc3Bfb3B0aW9uLCBlbW1lYW4pICU+JQogIGZpbHRlcihzdGltX2Zvcm1hdCA9PSAiUGhvdG9ncmFwaHMiKSAlPiUKICBtdXRhdGUobGFiZWwgPSBjYXNlX3doZW4oCiAgICByZXNwX29wdGlvbiA9PSAiUkZHIiB+ICJSRkciLAogICAgcmVzcF9vcHRpb24gPT0gIlJGQkciIH4gIlJGQkciKSkgJT4lCiAgZ3JvdXBfYnkoc3RpbV9mb3JtYXQsIHJlc3Bfb3B0aW9uLCBsYWJlbCkKIyMgIEludGVyYWN0aW9uIGZpZ3VyZToKZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZpZ3VyZSA8LSBleHAzX19ncmV5X19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24uZmlndXJlLmRhdGEgJT4lCiAgZ2dwbG90KCkgKwogIGFlcyh4ID0gc3RpbV9mb3JtYXQsIGNvbG91ciA9IHJlc3Bfb3B0aW9uLCBncm91cCA9IHJlc3Bfb3B0aW9uLCB5ID0gZW1tZWFuKSArCiAgc3RhdF9zdW1tYXJ5KGZ1bi55ID0gbWVhbiwgZ2VvbSA9ICJwb2ludCIsIHNpemUgPSAyLjQsIHNoYXBlID0gMTUpICsKICBzdGF0X3N1bW1hcnkoZnVuLnkgPSBtZWFuLCBnZW9tID0gImxpbmUiLCBzaXplID0gMS4yKSArCiAgZ2VvbV90ZXh0KHNpemUgPSA0LCBhZXMobGFiZWwgPSBsYWJlbCwgY29sb3VyID0gcmVzcF9vcHRpb24pLCBudWRnZV94ID0gMC4wOCwgaGp1c3QgPSAwLAogICAgICAgICAgICBkYXRhID0gZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZpZ3VyZS5sYWJlbHMpICsKICBzY2FsZV9jb2xvdXJfbWFudWFsKHZhbHVlcyA9IGMoJyM4ZWM2YzUnLCAnIzdkOWFiNScsICcjODU2NmFhJykpICsKICBsYWJzKHggPSAiU3RpbXVsaS1mb3JtYXQiLCB5ID0gIk1lYW4gcHJvcG9ydGlvbiBvZiBGQSBhc3NpZ25lZDogICdGYW1pbGlhcml0eSciKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGxpbWl0cyA9IGMoMCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IGMoMCwgMC4xMCwgMC4yMCwgMC4zMCwgMC40MCwgMC41MCwgMC42MCwgMC43MCwgMC44MCwgMC45MCwgMSksCiAgICAgICAgICAgICAgICAgICAgIGV4cGFuZCA9IGMoMCwgMCkpICsKICB0aGVtZV9jbGFzc2ljKCkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiwKICAgICAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwLCB2anVzdCA9IC00KSwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLAogICAgICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTAsIHZqdXN0ID0gNiksCiAgICAgICAgYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwKICAgICAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3Qoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgICAgICBwbG90Lm1hcmdpbiA9IG1hcmdpbigyMCwgMjAsIDI0LCAzMCkpCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjICAgIFBST1AgR1VFU1MgRkE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMjIFByZXAgZGF0YSBmb3IgYW5hbHlzaXM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfZGF0YSA8LSBleHAzX19ncmV5X2RhdGEgJT4lCiAgc2VsZWN0KGlkLCByZXNwX29wdGlvbiwgcHJvcF93b3JkX0ZBX2d1ZXNzLCBwcm9wX2RyYXdpbmdfRkFfZ3Vlc3MsIHByb3BfcGhvdG9fRkFfZ3Vlc3MpICU+JQogIHJlbmFtZSh3b3JkID0gInByb3Bfd29yZF9GQV9ndWVzcyIsIGRyYXdpbmcgPSAicHJvcF9kcmF3aW5nX0ZBX2d1ZXNzIiwgcGhvdG8gPSAicHJvcF9waG90b19GQV9ndWVzcyIpICU+JQogIGdhdGhlcihrZXkgPSAic3RpbV9mb3JtYXQiLCB2YWx1ZSA9ICJQUk9QLkdVRVNTLkZBIiwgd29yZCwgZHJhd2luZywgcGhvdG8pICU+JQogIG11dGF0ZV9hdCh2YXJzKCJpZCIsICJyZXNwX29wdGlvbiIsICJzdGltX2Zvcm1hdCIpLCBmYWN0b3IpICU+JQogIG11dGF0ZShzdGltX2Zvcm1hdCA9IHN0cl9yZXBsYWNlKHN0aW1fZm9ybWF0LCAid29yZCIsICJXb3JkcyIpKSAlPiUKICBtdXRhdGUoc3RpbV9mb3JtYXQgPSBzdHJfcmVwbGFjZShzdGltX2Zvcm1hdCwgImRyYXdpbmciLCAiRHJhd2luZ3MiKSkgJT4lCiAgbXV0YXRlKHN0aW1fZm9ybWF0ID0gc3RyX3JlcGxhY2Uoc3RpbV9mb3JtYXQsICJwaG90byIsICJQaG90b2dyYXBocyIpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwiUGhvdG9ncmFwaHMiKSkpICU+JQogIHRyYW5zZm9ybShyZXNwX29wdGlvbiA9IGZhY3RvcihyZXNwX29wdGlvbiwgbGV2ZWxzPWMoIlJGRyIsIlJGQkciKSkpCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jCiMjICBSdW4gMi13YXkgbWl4ZWQgQU5PVkE6CmV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBIDwtIGFvdl9leigiaWQiLCAiUFJPUC5HVUVTUy5GQSIsIGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXR3ZWVuID0gInJlc3Bfb3B0aW9uIiwgd2l0aGluID0gInN0aW1fZm9ybWF0IikKCiMjICBGb3JtYXQgQU5PVkEgbWFpbiBlZmZlY3RzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkEgPC0gcGFwYWphOjo6YXBhX3ByaW50LmFmZXhfYW92KGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBKSAKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3QgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBJGZ1bGwkc3RpbV9mb3JtYXQgJT4lIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19yZXNwLm9wdGlvbi5tYWluLmVmZmVjdCA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkEkZnVsbCRyZXNwX29wdGlvbiAlPiUgc3RyX2V4dHJhY3QoIl4oPzpbXlxcLF0qXFwsKXszfShbXlxcLF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0IDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQSRmdWxsJHJlc3Bfb3B0aW9uX3N0aW1fZm9ybWF0ICU+JQogIHN0cl9leHRyYWN0KCJeKD86W15cXCxdKlxcLCl7M30oW15cXCxdKikiKQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIwojIyAgUnVuIHBvc3QtaG9jIGNvbnRyYXN0czoKIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIFJlc3BvbnNlLW9wdGlvbjogIE5vdCBzaWduaWZpY2FudC4KIy0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gIC0gICMKIyMgIFN0aW11bGkgZm9ybWF0OgpleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fc3RpbS5mb3JtYXQubWVhbnMgPC0gZW1tZWFucyhleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQSwgfiBzdGltX2Zvcm1hdCkKZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlIDwtIHBhaXJzKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5tZWFucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkanVzdCA9ICJib25mZXJyb25pIikKIyMgIEZvcm1hdCBwYWlyd2lzZSByZXN1bHRzIGZvciB1c2UgaW4gcmVwb3J0OiAgCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3N0aW0uZm9ybWF0Lm1lYW5zIDwtIAogIHBhcGFqYTo6OmFwYV9wcmludC5lbW1HcmlkKGV4cDNfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5tZWFucykKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fd29yZHMubWVhbiA8LSAKICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSRXb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19kcmF3aW5ncy5tZWFuIDwtIAogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3N0aW0uZm9ybWF0Lm1lYW5zJGVzdGltYXRlJERyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3Bob3RvZ3JhcGhzLm1lYW4gPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5tZWFucyRlc3RpbWF0ZSRQaG90b2dyYXBocyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKQpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5wYWlyd2lzZSA8LSAKICBwYXBhamE6OjphcGFfcHJpbnQuZW1tR3JpZChleHAzX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fc3RpbS5mb3JtYXQucGFpcndpc2UpCgpleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZSA8LQogIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3N0aW0uZm9ybWF0LnBhaXJ3aXNlJGZ1bGwkV29yZHNfRHJhd2luZ3MgJT4lIAogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCmV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3dvcmRzLnZzLnBob3RvZ3JhcGhzLnBhaXJ3aXNlIDwtCiAgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fc3RpbS5mb3JtYXQucGFpcndpc2UkZnVsbCRXb3Jkc19QaG90b2dyYXBocyAlPiUgCiAgc3RyX3JlbW92ZSgiXig/OlteXFwkXSpcXCQpezZ9KFteXFwkXSopIikKZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fZHJhd2luZ3MudnMucGhvdG9ncmFwaHMucGFpcndpc2UgPC0KICBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5wYWlyd2lzZSRmdWxsJERyYXdpbmdzX1Bob3RvZ3JhcGhzICU+JQogIHN0cl9yZW1vdmUoIl4oPzpbXlxcJF0qXFwkKXs2fShbXlxcJF0qKSIpCiMtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAtICAjCiMjICBJbnRlcmFjdGlvbjogIE5vdCBzaWduaWZpY2FudC4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgICAgRkEgRklHVVJFOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlczogIApleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGEgPC0gCiAgYXMudGliYmxlKGVtbWVhbnMoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuUkVDLkZBLCB+IHJlc3Bfb3B0aW9uOnN0aW1fZm9ybWF0KSkgJT4lCiAgc2VsZWN0KC1kZiwgLWxvd2VyLkNMLCAtdXBwZXIuQ0wpCmV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YSA8LSAKICBhcy50aWJibGUoZW1tZWFucyhleHAzX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkEsIH4gcmVzcF9vcHRpb246c3RpbV9mb3JtYXQpKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKZXhwM19fZ3JleV9fUFJPUC5HVUVTUy5GQV9fZmlndXJlLmRhdGEgPC0gCiAgYXMudGliYmxlKGVtbWVhbnMoZXhwM19fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkEsIH4gcmVzcF9vcHRpb246c3RpbV9mb3JtYXQpKSAlPiUKICBzZWxlY3QoLWRmLCAtbG93ZXIuQ0wsIC11cHBlci5DTCkKCmV4cDNfX2dyZXlfX1BST1AuUkVDLkZBTS5HVUVTUy5GQV9fZmlndXJlLmRhdGEgPC0gCiAgdHJpYmJsZSh+InJlc3Bfb3B0aW9uIiwgfiJzdGltX2Zvcm1hdCIsIH4icmZnIiwgfiJlbW1lYW4iLCB+IlNFIiwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVsxLDFdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbMSwyXSkpLCAiUmVjb2xsZWN0aW9uIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVsxLDNdKSksCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbMSw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzIsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVsyLDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzIsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVsyLDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbMywxXSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzMsMl0pKSwgIlJlY29sbGVjdGlvbiIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbMywzXSkpLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzMsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVs0LDFdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbNCwyXSkpLCAiUmVjb2xsZWN0aW9uIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVs0LDNdKSksCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbNCw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzUsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVs1LDJdKSksICJSZWNvbGxlY3Rpb24iLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzUsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuUkVDLkZBX19maWd1cmUuZGF0YVs1LDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbNiwxXSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzYsMl0pKSwgIlJlY29sbGVjdGlvbiIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLlJFQy5GQV9fZmlndXJlLmRhdGFbNiwzXSkpLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5SRUMuRkFfX2ZpZ3VyZS5kYXRhWzYsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVsxLDFdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbMSwyXSkpLCAiRmFtaWxpYXJpdHkiLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzEsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVsxLDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbMiwxXSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzIsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVsyLDNdKSksCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbMiw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzMsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVszLDJdKSksICJGYW1pbGlhcml0eSIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbMywzXSkpLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzMsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVs0LDFdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbNCwyXSkpLCAiRmFtaWxpYXJpdHkiLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzQsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVs0LDRdKSksCiAgICAgICAgICBhcy5jaGFyYWN0ZXIocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbNSwxXSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzUsMl0pKSwgIkZhbWlsaWFyaXR5IiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVs1LDNdKSksCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbNSw0XSkpLAogICAgICAgICAgYXMuY2hhcmFjdGVyKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzYsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuRkFNLkZBX19maWd1cmUuZGF0YVs2LDJdKSksICJGYW1pbGlhcml0eSIsCiAgICAgICAgICBhcy5kb3VibGUocHVsbChleHAzX19ncmV5X19QUk9QLkZBTS5GQV9fZmlndXJlLmRhdGFbNiwzXSkpLAogICAgICAgICAgYXMuZG91YmxlKHB1bGwoZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ZpZ3VyZS5kYXRhWzYsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzEsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzEsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzEsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzEsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzIsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzIsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzIsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzIsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzMsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzMsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzMsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzMsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzQsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzQsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzQsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzQsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzUsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzUsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzUsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzUsNF0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzYsMV0pKSwKICAgICAgICAgIGFzLmNoYXJhY3RlcihwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzYsMl0pKSwgIkd1ZXNzaW5nIiwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzYsM10pKSwKICAgICAgICAgIGFzLmRvdWJsZShwdWxsKGV4cDNfX2dyZXlfX1BST1AuR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhWzYsNF0pKSkgJT4lCiAgdHJhbnNmb3JtKHJlc3Bfb3B0aW9uID0gZmFjdG9yKHJlc3Bfb3B0aW9uLCBsZXZlbHM9YygiUkZHIiwiUkZCRyIpKSkgJT4lCiAgdHJhbnNmb3JtKHJmZyA9IGZhY3RvcihyZmcsIGxldmVscz1jKCJSZWNvbGxlY3Rpb24iLCJGYW1pbGlhcml0eSIsIkd1ZXNzaW5nIikpKSAlPiUKICB0cmFuc2Zvcm0oc3RpbV9mb3JtYXQgPSBmYWN0b3Ioc3RpbV9mb3JtYXQsIGxldmVscz1jKCJXb3JkcyIsIkRyYXdpbmdzIiwgIlBob3RvZ3JhcGhzIikpKQoKIyMgIFByZXAgZGF0YSBmb3IgZmlndXJlczogIApleHAzX19ncmV5X19QUk9QLlJFQy5GQU0uR1VFU1MuRkFfX2ZpZ3VyZSA8LQogIGdncGxvdChleHAzX19ncmV5X19QUk9QLlJFQy5GQU0uR1VFU1MuRkFfX2ZpZ3VyZS5kYXRhLCBhZXMoeCA9IHN0aW1fZm9ybWF0LCB5ID0gZW1tZWFuLCBmaWxsID0gcmZnKSkgKwogIHNjYWxlX2ZpbGxfbWFudWFsKCJsZWdlbmQiLHZhbHVlcyA9IGMoIlJlY29sbGVjdGlvbiIgPSAiIzFCNDI1MSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhbWlsaWFyaXR5IiA9ICIjNkE2QzkzIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR3Vlc3NpbmciID0gIiNENDkxQ0EiKSkgKyAKICBnZW9tX2NvbChwb3NpdGlvbiA9IHBvc2l0aW9uX2RvZGdlKCkpICsKICBnZW9tX2Vycm9yYmFyKGFlcyh5bWluID0gcG1heChlbW1lYW4tU0UsIDApLCB5bWF4ID0gZW1tZWFuK1NFKSwgCiAgICAgICAgICAgICAgICB3aWR0aCA9IDAuMiwgc2l6ZSA9IDAuMywgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSgwLjkpKSArCiAgZmFjZXRfd3JhcCh+cmVzcF9vcHRpb24sIHN0cmlwLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHggPSAiUmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbiIsIHkgPSAiTWVhbiBwcm9wb3J0aW9uIG9mIEZBcyIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoZXhwYW5kID0gYygwLCAwKSwgbGltaXRzID0gYygwLCAxKSkgKwogIHRoZW1lX2NsYXNzaWMoKSArICAgICMgUmVtb3ZlcyBncmV5IGJhY2tncm91bmQgYW5kIGdyaWQgbGluZXMuIAogIHRoZW1lKAogICAgc3RyaXAucGxhY2VtZW50ID0gIm91dHNpZGUiLAogICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIndoaXRlIiwgc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAic29saWQiLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfdGV4dCh2anVzdD0tNCksICAgICMgTW92ZSB4LWF4aXMgbGFiZWwgZnVydGhlciBhd2F5IGZyb20gdGhlIGZpZ3VyZS4KICAgIGF4aXMudGl0bGUueSA9IGVsZW1lbnRfdGV4dCh2anVzdD02KSwgICAgICMgTW92ZSB5LWF4aXMgbGFiZWwgZnVydGhlciBhd2F5IGZyb20gdGhlIGZpZ3VyZS4KICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgIGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KHNpemUgPSA5KSwKICAgIGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KGZpbGwgPSAid2hpdGUiLCBzaXplID0gMC4yLCBsaW5ldHlwZSA9ICJzb2xpZCIsIGNvbG91ciA9ICJibGFjayIpLAogICAgbGVnZW5kLnRpdGxlID0gZWxlbWVudF9ibGFuaygpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gYygwLjUsIDAuODk2KSwKICAgIGxlZ2VuZC5tYXJnaW4gPSBtYXJnaW4oNiwgNiwgNiwgNiksCiAgICBsZWdlbmQuc3BhY2luZy55ID0gdW5pdCgtMSwgInB0IiksCiAgICBwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3Qoc2l6ZSA9IDAuNSwgbGluZXR5cGUgPSAnc29saWQnLCBjb2xvdXIgPSAiYmxhY2siKSwKICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKDIwLCAyMCwgMjQsIDMwKSkKYGBgCgpgYGB7ciBleHAzX19wcm9wLXJlYy1mYW0tZ3Vlc3MtRkEtLWZpZ3VyZWNhcHRpb24sIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICBmaWd1cmVfbnVtYmVyaW5nKG5hbWUgPSAiZXhwM19fcHJvcC1yZWMtZmFtLWd1ZXNzLUZBLS1maWd1cmVjYXB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJQcm9wb3J0aW9uIG9mIEZBcyBhc3NpZ25lZCBSZWNvbGxlY3Rpb24sIEZhbWlsaWFyaXR5LCBhbmQgR3Vlc3NpbmcsIGJ5IHN0aW11bGkgCiAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbi4iKQpgYGAKCiMjIyBGQXMgYXNzaWduZWQgUmVjb2xsZWN0aW9uLCBGYW1pbGlhcml0eSwgYW5kIEd1ZXNzaW5nClRvIGRldGVybWluZSB0aGUgZWZmZWN0cyBvZiBzdGltdWxpIGZvcm1hdCBhbmQgcmVzcG9uc2Utb3B0aW9uIG9uIGZhbHNlIGFsYXJtcywgc2VwYXJhdGUgMyAoc3RpbXVsaSBmb3JtYXQ6IHdvcmRzLCBkcmF3aW5ncywgcGhvdG9ncmFwaHMpIHggMiAocmVzcG9uc2Utb3B0aW9uIGNvbmRpdGlvbjogUkZHLWp1ZGdlbWVudHMsIFJGQkctanVkZ2VtZW50cykgbWl4ZWQgQU5PVkFzIHdlcmUgY29uZHVjdGVkIG9uIHRoZSBtZWFuIHByb3BvcnRpb24gb2YgRkFzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgRmFtaWxpYXJpdHksIGFuZCBHdWVzc2luZyAoc2VlIGByIGZpZ3VyZV9udW1iZXJpbmcoImV4cDNfX3Byb3AtcmVjLWZhbS1ndWVzcy1GQS0tZmlndXJlY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuCgpgYGB7ciBmaWcud2lkdGg9NywgZmlnLmhlaWdodD01LjUsIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiAgICBleHAzX19ncmV5X19QUk9QLlJFQy5GQU0uR1VFU1MuRkFfX2ZpZ3VyZQpgYGAKYHIgZmlndXJlX251bWJlcmluZygiZXhwM19fcHJvcC1yZWMtZmFtLWd1ZXNzLUZBLS1maWd1cmVjYXB0aW9uIilgCgojIyMjIFJlY29sbGVjdGlvbiAoRkFzKQpGb3IgRkFzIGFzc2lnbmVkIFJlY29sbGVjdGlvbiwgdGhlcmUgd2FzIG5vIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHN0aW11bGkgZm9ybWF0IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLlJFQy5GQV9fc3RpbS5mb3JtYXQubWFpbi5lZmZlY3RgXSBvciBpbnRlcmFjdGlvbiBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5SRUMuRkFfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0YF0uCgpgYGB7ciBleHAzX19wcm9wLWZhbS1GQS0tZmlndXJlY2FwdGlvbiwgZWNobz1GQUxTRSwgcmVzdWx0cyA9IEZBTFNFLCBjYWNoZT1GQUxTRX0KICAgIGZpZ3VyZV9udW1iZXJpbmcobmFtZSA9ICJleHAzX19wcm9wLWZhbS1GQS0tZmlndXJlY2FwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAiSW50ZXJhY3Rpb24gcGxvdCBiZXR3ZWVuIHN0aW11bGkgZm9ybWF0IGFuZCByZXNwb25zZS1vcHRpb24gZm9yIHRoZSBtZWFuIAogICAgICAgICAgICAgICAgICAgICBwcm9wb3J0aW9uIG9mIEZBcyBhc3NpZ25lZCAnRmFtaWxpYXJpdHknLiIpCmBgYAojIyMjIEZhbWlsaWFyaXR5IChGQXMpCkZvciBGQXMgYXNzaWduZWQgRmFtaWxpYXJpdHksIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IGludGVyYWN0aW9uIGJldHdlZW4gc3RpbXVsaSBmb3JtYXQgYW5kIHJlc3BvbnNlLW9wdGlvbiBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0YF0gKHNlZSBgciBmaWd1cmVfbnVtYmVyaW5nKCJleHAzX19wcm9wLWZhbS1GQS0tZmlndXJlY2FwdGlvbiIsIGRpc3BsYXkgPSAiY2l0ZSIpYCkuIFdpdGhpbiB0aGUgUkZHIGNvbmRpdGlvbiwgd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkdfV29yZHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSByZXN1bHRlZCBpbiBtb3JlIEZhbWlsaWFyaXR5IEZBcyB0aGFuIHBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdXb3Jkc19SRkdQaG90b2dyYXBoc2BdLCBidXQgbm90IGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdXb3Jkc19SRkdEcmF3aW5nc2BdLiBUaGUgbnVtYmVyIG9mIEZhbWlsaWFyaXR5IEZBcyBkaWQgbm90IGRpZmZlciBiZXR3ZWVuIGRyYXdpbmdzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgYW5kIHBob3RvZ3JhcGhzIChgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkdEcmF3aW5nc19SRkdQaG90b2dyYXBoc2BdIGluIHRoZSBSRkcgY29uZGl0aW9uLgoKV2l0aGluIHRoZSBSRkJHIGNvbmRpdGlvbiwgd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgYWdhaW4gcHJvZHVjZWQgbW9yZSBGYW1pbGlhcml0eSBGQXMgdGhhbiBwaG90b2dyYXBocyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGQkdXb3Jkc19SRkJHUGhvdG9ncmFwaHNgXS4gSG93ZXZlciwgd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgYWxzbyBwcm9kdWNlZCBtb3JlIEZhbWlsaWFyaXR5IEZBcyB0aGFuIGRyYXdpbmdzKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5mdWxsLnBhaXJ3aXNlJHN0YXRpc3RpYyRSRkJHV29yZHNfUkZCR0RyYXdpbmdzYF0uIEFzIGJlZm9yZSwgdGhlIG51bWJlciBvZiBGYW1pbGlhcml0eSBGQXMgZGlkIG5vdCBkaWZmZXIgYmV0d2VlbiBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfRHJhd2luZ3MgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgKSBhbmQgcGhvdG9ncmFwaHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCkgaW4gdGhlIFJGQkcgY29uZGl0aW9uIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZCR0RyYXdpbmdzX1JGQkdQaG90b2dyYXBoc2BdLgoKQ29tcGFyaXNvbnMgYWNyb3NzIHJlc3BvbnNlLW9wdGlvbiBjb25kaXRpb25zIHNob3dlZCBubyBkaWZmZXJlbmNlcyBpbiB0aGUgbnVtYmVyIG9mIEZhbWlsaWFyaXR5IEZBcywgZm9yIGFueSBzdGltdWxpIGZvcm1hdDogd29yZHMgKFJGRzogYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19Xb3JkcyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWAsIFJGQkc6IGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX1dvcmRzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR1dvcmRzX1JGQkdXb3Jkc2BdKTsgZHJhd2luZ3MgKFJGRzogYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGR19EcmF3aW5ncyAlPiUgc3RyX3JlbW92ZSgiXFwsLioiKWAsIFJGQkc6IGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuRkFNLkZBX19pbnRlcmFjdGlvbi5tZWFucyRlc3RpbWF0ZSRSRkJHX0RyYXdpbmdzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCBbYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZ1bGwucGFpcndpc2Ukc3RhdGlzdGljJFJGR0RyYXdpbmdzX1JGQkdEcmF3aW5nc2BdOyBwaG90b2dyYXBocyAoUkZHOiBgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24ubWVhbnMkZXN0aW1hdGUkUkZHX1Bob3RvZ3JhcGhzICU+JSBzdHJfcmVtb3ZlKCJcXCwuKiIpYCwgUkZCRzogYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLm1lYW5zJGVzdGltYXRlJFJGQkdfUGhvdG9ncmFwaHMgJT4lIHN0cl9yZW1vdmUoIlxcLC4qIilgIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkZBTS5GQV9faW50ZXJhY3Rpb24uZnVsbC5wYWlyd2lzZSRzdGF0aXN0aWMkUkZHUGhvdG9ncmFwaHNfUkZCR1Bob3RvZ3JhcGhzYF0pLiAKCiZuYnNwOwoKYGBge3IgZmlnLndpZHRoPTcsIGZpZy5oZWlnaHQ9NS41LCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQogICAgZXhwM19fZ3JleV9fUFJPUC5GQU0uRkFfX2ludGVyYWN0aW9uLmZpZ3VyZQpgYGAKYHIgZmlndXJlX251bWJlcmluZygiZXhwM19fcHJvcC1mYW0tRkEtLWZpZ3VyZWNhcHRpb24iKWAKCiMjIyMgIEd1ZXNzaW5nIChGQXMpCkZvciBGQXMgYXNzaWduZWQgR3Vlc3NpbmcsIHRoZXJlIHdhcyBhIHNpZ25pZmljYW50IG1haW4gZWZmZWN0IG9mIHN0aW11bGkgZm9ybWF0IFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19zdGltLmZvcm1hdC5tYWluLmVmZmVjdGBdLiBUaGUgaW50ZXJhY3Rpb24gZWZmZWN0IHdhcyBub3Qgc2lnbmlmaWNhbnQgW2ByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX2ludGVyYWN0aW9uLm1haW4uZWZmZWN0YF0uIFBvc3QtaG9jIGNvbXBhcmlzb25zIGZvciB0aGUgbWFpbiBlZmZlY3Qgb2Ygc3RpbXVsaSBmb3JtYXQgc2hvd2VkIHRoYXQgd29yZHMgKGByIGV4cDNfX2FwYV9fZ3JleV9fYW5vdmFfX1BST1AuR1VFU1MuRkFfX3dvcmRzLm1lYW5gKSBwcm9kdWNlZCBzaWduaWZpY2FudGx5IG1vcmUgR3Vlc3NpbmcgRkFzIHRoYW4gYm90aCBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fZHJhd2luZ3MubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX193b3Jkcy52cy5kcmF3aW5ncy5wYWlyd2lzZWBdIGFuZCBwaG90b2dyYXBocyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fcGhvdG9ncmFwaHMubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX193b3Jkcy52cy5waG90b2dyYXBocy5wYWlyd2lzZWBdLiBUaGVyZSB3YXMgbm8gZGlmZmVyZW5jZSBpbiB0aGUgcHJvcG9ydGlvbiBvZiBGQXMgYXNzaWduZWQgR3Vlc3NpbmcgYmV0d2VlbiBkcmF3aW5ncyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fZHJhd2luZ3MubWVhbmApIGFuZCBwaG90b2dyYXBocyAoYHIgZXhwM19fYXBhX19ncmV5X19hbm92YV9fUFJPUC5HVUVTUy5GQV9fcGhvdG9ncmFwaHMubWVhbmApIFtgciBleHAzX19hcGFfX2dyZXlfX2Fub3ZhX19QUk9QLkdVRVNTLkZBX19kcmF3aW5ncy52cy5waG90b2dyYXBocy5wYWlyd2lzZWBdLgoKIyMgRGlzY3Vzc2lvbgoKQWNyb3NzIGEgcmFuZ2Ugb2YgcGVyZm9ybWFuY2UgdmFyaWFibGVzLCB0aGUgcmVzdWx0cyBzaG93IGEgY2xlYXIgZWZmZWN0IG9mIHN0aW11bGkgZGlzdGluY3RpdmVuZXNzLiBBcyBkaXN0aW5jdGl2ZW5lc3MgaW5jcmVhc2VkIChmcm9tIHdvcmRzLCB0byBkcmF3aW5ncywgdG8gcGhvdG9ncmFwaHMpLCB0aGlzIHByb2R1Y2VkIG1vcmUgaGl0cywgbGVzcyBGQXMsIGJldHRlciBvdmVyYWxsIHJlY29nbml0aW9uLCBhbmQgYmV0dGVyIGRpc2NyaW1pbmF0aW9uIGJldHdlZW4gaGl0cyAvIEZBcy4gVGhlIGFic2VuY2Ugb2YgYW55IGludGVyYWN0aW9uIGVmZmVjdHMgYWNyb3NzIHRoZXNlIHZhcmlhYmxlcyBkZW1vbnN0cmF0ZXMgdGhhdCB0aGUgYXZhaWxhYmlsaXR5IG9mIGRpZmZlcmVudCByZXNwb25zZSBvcHRpb25zIChpLmUuIHRoZSBhZGRpdGlvbiBvZiBhIEJvdGggb3B0aW9uKSBoYWQgbGl0dGxlIGltcGFjdCBvbiBvdmVyYWxsIHBlcmZvcm1hbmNlLiBSRihCKUcgcmVzcG9uc2VzIGZvciBhY2N1cmF0ZSByZWNvZ25pdGlvbiBkaXNwbGF5ZWQgYSBzaW1pbGFyIHBhdHRlcm47IGFzIGRpc3RpbmN0aXZlbmVzcyBpbmNyZWFzZWQsIHRoZSBudW1iZXIgb2YgUmVjb2xsZWN0ZWQgaGl0cyBhbHNvIGluY3JlYXNlZCwgd2hpbGUgdGhlIG51bWJlciBvZiBGYW1pbGlhcml0eSBhbmQgR3Vlc3NpbmcgaGl0cyBkZWNyZWFzZWQuIFRoZSByYXRlIG9mIGJvdGggRmFtaWxpYXJpdHkgRkFzIGFuZCBHdWVzc2luZyBGQXMgd2FzIGFsc28gaGlnaGVzdCBmb3IgdGhlIGxlYXN0IGRpc3RpbmN0aXZlIHN0aW11bGkgKHdvcmRzKS4KCmBgYHtyIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiMgcGhvdG9zIC0gc2lnbmlmaWNhbnRseSBsb3dlciBjLXNjb3JlcyAoYW5kIHRodXMgYSBsZXNzIGNvbnNlcnZhdGl2ZSByZXNwb25zZSBiaWFzKSB0aGFuIHdvcmRzIGFuZCBkcmF3aW5ncwpgYGAKClxuZXdwYWdlCgojIENoYXB0ZXIgNCAoQWRkaXRpb24gb2YgY29sb3VyKQoKIyBSZWZlcmVuY2VzClxzZXRsZW5ndGh7XHBhcmluZGVudH17LTAuMmlufQpcc2V0bGVuZ3Roe1xsZWZ0c2tpcH17MC4yaW59ClxzZXRsZW5ndGh7XHBhcnNraXB9ezhwdH0KXG5vaW5kZW50Cgo8ZGl2IGlkPSJyZWZzIj48L2Rpdj4KICAKXG5ld3BhZ2UKXGJsYW5kc2NhcGUKIyBBcHBlbmRpY2VzCiMjIEFwcGVuZGl4IEEKYGBge3IgZXhwMl9fc3BlbGxpbmctY29ycmVjdGlvbnMtLXRhYmxlY2FwdGlvbiwgZWNobz1GQUxTRSwgcmVzdWx0cyA9IEZBTFNFLCBjYWNoZT1GQUxTRX0KICAgIHRhYmxlX251bWJlcmluZyhuYW1lID0gImV4cDJfX3NwZWxsaW5nLWNvcnJlY3Rpb25zLS10YWJsZWNhcHRpb24iLCAKICAgICAgICAgICAgICAgICAgICAgY2FwdGlvbiA9ICJTcGVsbGluZyBjb3JyZWN0aW9ucyAvIG1hbmlwdWxhdGlvbnMgdG8gbmFtaW5nIHJlc3BvbnNlcy4iKQpgYGAKCmBgYHtyIGluY2x1ZGU9RkFMU0UsIGNhY2hlPVRSVUV9CiAgICBleHAyX19zcGVsbGluZ19jb3JyZWN0aW9ucyA8LSByZWFkX2NzdigiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8yL3NwZWxsaW5nX2NvcnJlY3Rpb25zLmNzdiIpICU+JQogICAgICAgIG11dGF0ZShSZXNwb25zZSA9IHJlcGxhY2VfbmEoUmVzcG9uc2UsICIiKSkgJT4lCiAgICAgICAgbXV0YXRlKENvcnJlY3Rpb24gPSByZXBsYWNlX25hKENvcnJlY3Rpb24sICIiKSkgJT4lCiAgICAgICAgbXV0YXRlKFJlc3BvbnNlXzEgPSByZXBsYWNlX25hKFJlc3BvbnNlXzEsICIiKSkgJT4lCiAgICAgICAgbXV0YXRlKENvcnJlY3Rpb25fMSA9IHJlcGxhY2VfbmEoQ29ycmVjdGlvbl8xLCAiIikpICU+JQogICAgICAgIG11dGF0ZShSZXNwb25zZV8yID0gcmVwbGFjZV9uYShSZXNwb25zZV8yLCAiIikpICU+JQogICAgICAgIG11dGF0ZShDb3JyZWN0aW9uXzIgPSByZXBsYWNlX25hKENvcnJlY3Rpb25fMiwgIiIpKSAlPiUKICAgICAgICByZW5hbWUoIlJlc3BvbnNlICIgPSAiUmVzcG9uc2VfMSIsICJDb3JyZWN0aW9uICIgPSAiQ29ycmVjdGlvbl8xIiwKICAgICAgICAgICAgICAgIlJlc3BvbnNlICAiID0gIlJlc3BvbnNlXzIiLCAiQ29ycmVjdGlvbiAgIiA9ICJDb3JyZWN0aW9uXzIiKQpgYGAKYHIgdGFibGVfbnVtYmVyaW5nKCJleHAyX19zcGVsbGluZy1jb3JyZWN0aW9ucy0tdGFibGVjYXB0aW9uIilgCmBgYHtyIHNwZWxsaW5nLWNvcnJlY3Rpb25zLXRhYmxlLCBlY2hvPUZBTFNFLCBjYWNoZT1UUlVFfQogICAgZXhwMl9fc3BlbGxpbmdfY29ycmVjdGlvbnMgJT4lCiAgICAgICAga2FibGUoImxhdGV4IiwgbG9uZ3RhYmxlID0gVCwgYm9va3RhYnMgPSBUKSAlPiUKICAgICAgICBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsImNvbmRlbnNlZCIpKSAlPiUKICAgICAgICBrYWJsZV9zdHlsaW5nKGxhdGV4X29wdGlvbnMgPSBjKCJyZXBlYXRfaGVhZGVyIiksIGZvbnRfc2l6ZSA9IDcpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjIuNmNtIikgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoMiwgd2lkdGggPSAiMi4zY20iLCBib3JkZXJfcmlnaHQgPSBUKSAlPiUKICAgICAgICBjb2x1bW5fc3BlYygzLCB3aWR0aCA9ICIyLjZjbSIpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjIuM2NtIiwgYm9yZGVyX3JpZ2h0ID0gVCkgJT4lCiAgICAgICAgY29sdW1uX3NwZWMoNSwgd2lkdGggPSAiMi42Y20iKSAlPiUKICAgICAgICBjb2x1bW5fc3BlYyg2LCB3aWR0aCA9ICIyLjZjbSIpCmBgYApcZWxhbmRzY2FwZQpcbmV3cGFnZQojIyBBcHBlbmRpeCBCCmBgYHtyIGVjaG89RkFMU0UsIHJlc3VsdHMgPSBGQUxTRSwgY2FjaGU9RkFMU0V9CiAgICB0YWJsZV9udW1iZXJpbmcobmFtZSA9ICJleHAyX19mdWxsLW5vcm1zLWRhdGEtLXRhYmxlY2FwdGlvbiIsIAogICAgICAgICAgICAgICAgICAgICBjYXB0aW9uID0gIk5vcm1hdGl2ZSBkYXRhIGZvciBhbGwgcGhvdG9ncmFwaCBpdGVtcy4iKQpgYGAKCmByIHRhYmxlX251bWJlcmluZygiZXhwMl9fZnVsbC1ub3Jtcy1kYXRhLS10YWJsZWNhcHRpb24iKWAKYGBge3Igbm9ybXMtdGFibGUsIGluY2x1ZGU9RkFMU0UsIHdhcm5pbmcgPSBGQUxTRSwgbWVzc2FnZT1GQUxTRSwgY2FjaGU9RkFMU0V9CiAgICBleHAyX19ub3JtcyA8LSBleHAyX19yYXdfZGF0YSAlPiUKICAgICAgICB1bmdyb3VwKCkgJT4lIAogICAgICAgIHNlbGVjdChzdGltLCBmYW1pbGlhcml0eSwgdmlzdWFsY29tcGxleGl0eSwgY29sb3VyZGlhZ25vc3RpY2l0eSwgbWVudGFsaW1hZ2VyeWFncmVlbWVudCkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiY29sb3VyMSIsICJjb2xvdXIiKSkgJT4lCiAgICAgICAgbXV0YXRlKHN0aW0gPSBzdHJfcmVwbGFjZShzdGltLCAiZ3JleTEiLCAiZ3JleSIpKSAlPiUKICAgICAgICBtdXRhdGUoZmFtaWxpYXJpdHkgPSBzdHJfcmVtb3ZlKGZhbWlsaWFyaXR5LCAiZmFtXyIpKSAlPiUKICAgICAgICBtdXRhdGUodmlzdWFsY29tcGxleGl0eSA9IHN0cl9yZW1vdmUodmlzdWFsY29tcGxleGl0eSwgInZpc2NvbV8iKSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbG91cmRpYWdub3N0aWNpdHkgPSBzdHJfcmVtb3ZlKGNvbG91cmRpYWdub3N0aWNpdHksICJjb2xkaWFfIikpICU+JQogICAgICAgIG11dGF0ZShtZW50YWxpbWFnZXJ5YWdyZWVtZW50ID0gc3RyX3JlbW92ZShtZW50YWxpbWFnZXJ5YWdyZWVtZW50LCAibWVuaW1hXyIpKSAlPiUKICAgICAgICBtdXRhdGUoZmFtaWxpYXJpdHkgPSBhcy5kb3VibGUoZmFtaWxpYXJpdHkpKSAlPiUKICAgICAgICBtdXRhdGUodmlzdWFsY29tcGxleGl0eSA9IGFzLmRvdWJsZSh2aXN1YWxjb21wbGV4aXR5KSkgJT4lCiAgICAgICAgbXV0YXRlKGNvbG91cmRpYWdub3N0aWNpdHkgPSBhcy5kb3VibGUoY29sb3VyZGlhZ25vc3RpY2l0eSkpICU+JQogICAgICAgIG11dGF0ZShtZW50YWxpbWFnZXJ5YWdyZWVtZW50ID0gYXMuZG91YmxlKG1lbnRhbGltYWdlcnlhZ3JlZW1lbnQpKSAlPiUKICAgICAgICBncm91cF9ieShzdGltKSAlPiUKICAgICAgICBzdW1tYXJpc2VfYWxsKHRpYmJsZTo6bHN0KG1lYW4sIHNkKSwgbmEucm0gPSBUUlVFKSAlPiUKICAgICAgICByZW5hbWUoUGhvdG9ncmFwaCA9ICJzdGltIiwgRmFtX01lYW4gPSAiZmFtaWxpYXJpdHlfbWVhbiIsIEZhbV9TRCA9ICJmYW1pbGlhcml0eV9zZCIsICAgCiAgICAgICAgICAgICAgIFZpc0NvbV9NZWFuID0gInZpc3VhbGNvbXBsZXhpdHlfbWVhbiIsIFZpc0NvbV9TRCA9ICJ2aXN1YWxjb21wbGV4aXR5X3NkIiwKICAgICAgICAgICAgICAgQ29sRGlhX01lYW4gPSAiY29sb3VyZGlhZ25vc3RpY2l0eV9tZWFuIiwgQ29sRGlhX1NEID0gImNvbG91cmRpYWdub3N0aWNpdHlfc2QiLCAKICAgICAgICAgICAgICAgTWVuSW1hX01lYW4gPSAibWVudGFsaW1hZ2VyeWFncmVlbWVudF9tZWFuIiwgTWVuSW1hX1NEID0gIm1lbnRhbGltYWdlcnlhZ3JlZW1lbnRfc2QiKSAlPiUKICAgICAgICBzZWxlY3QoUGhvdG9ncmFwaCwgRmFtX01lYW4sIEZhbV9TRCwgVmlzQ29tX01lYW4sIFZpc0NvbV9TRCwgQ29sRGlhX01lYW4sIAogICAgICAgICAgICAgICBDb2xEaWFfU0QsIE1lbkltYV9NZWFuLCBNZW5JbWFfU0QpICU+JQogICAgICAgIG11dGF0ZV9hdChjKCJGYW1fTWVhbiIsICJGYW1fU0QiLCAiVmlzQ29tX01lYW4iLCAiVmlzQ29tX1NEIiwgIkNvbERpYV9NZWFuIiwgCiAgICAgICAgICAgICAgICAgICAgIkNvbERpYV9TRCIsICJNZW5JbWFfTWVhbiIsICJNZW5JbWFfU0QiKSwgcm91bmQsIDIpICU+JQogICAgICAgIG11dGF0ZV9hbGwoYXMuY2hhcmFjdGVyKSAlPiUKICAgICAgICBtdXRhdGUoRmFtX1NEID0gc3RyX2MoIigiLCBGYW1fU0QsICIpIikpICU+JQogICAgICAgIG11dGF0ZShWaXNDb21fU0QgPSBzdHJfYygiKCIsIFZpc0NvbV9TRCwgIikiKSkgJT4lCiAgICAgICAgbXV0YXRlKENvbERpYV9TRCA9IHN0cl9jKCIoIiwgQ29sRGlhX1NELCAiKSIpKSAlPiUKICAgICAgICBtdXRhdGUoTWVuSW1hX1NEID0gc3RyX2MoIigiLCBNZW5JbWFfU0QsICIpIikpICU+JQogICAgICAgIHVuaXRlKCJGYW1pbGlhcml0eSIsIEZhbV9NZWFuOkZhbV9TRCwgc2VwID0gIiAiLCByZW1vdmUgPSBUUlVFKSAlPiUKICAgICAgICB1bml0ZSgiVmlzdWFsIENvbXBsZXhpdHkiLCBWaXNDb21fTWVhbjpWaXNDb21fU0QsIHNlcCA9ICIgIiwgcmVtb3ZlID0gVFJVRSkgJT4lCiAgICAgICAgdW5pdGUoIk1lbnRhbCBJbWFnZXJ5IiwgTWVuSW1hX01lYW46TWVuSW1hX1NELCBzZXAgPSAiICIsIHJlbW92ZSA9IFRSVUUpICU+JQogICAgICAgIHVuaXRlKCJDb2xvdXJfRGlhZ25vc3RpY2l0eSIsIENvbERpYV9NZWFuOkNvbERpYV9TRCwgc2VwID0gIiAiLCByZW1vdmUgPSBUUlVFKSAlPiUKICAgICAgICBtdXRhdGUoQ29sb3VyX0RpYWdub3N0aWNpdHkgPSBzdHJfcmVwbGFjZShDb2xvdXJfRGlhZ25vc3RpY2l0eSwgIk5hTiBOQSIsICIiKSkgJT4lCiAgICAgICAgcmVuYW1lKCJDb2xvdXIgRGlhZ25vc3RpY2l0eSIgPSAiQ29sb3VyX0RpYWdub3N0aWNpdHkiKQojaW1hZ2VfcmVmcyA8LSByZWFkX2NzdigiLi9yZXNvdXJjZXMvZXhwZXJpbWVudF8yL2ltYWdlX3JlZnMuY3N2IikKIyAgICAgICAgbm9ybXMyIDwtIChiaW5kX2NvbHMobm9ybXMsIGltYWdlX3JlZnMpKQpgYGAKCmBgYHtyIGVjaG89RkFMU0UsIGNhY2hlPVRSVUV9CiAgICBleHAyX19ub3JtcyAlPiUKICAgICAgICBrYWJsZSgibGF0ZXgiLCBsb25ndGFibGUgPSBULCBib29rdGFicyA9IFQpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwiY29uZGVuc2VkIikpICU+JQogICAgICAgIGthYmxlX3N0eWxpbmcobGF0ZXhfb3B0aW9ucyA9IGMoInJlcGVhdF9oZWFkZXIiKSwgZm9udF9zaXplID0gOCkgJT4lCiAgICAgICAgcGFja19yb3dzKGluZGV4ID0gdGFibGUoZ3N1YigiWzAtOV0uKiIsICIiLCBleHAyX19ub3JtcyRQaG90b2dyYXBoKSkpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDEsIHdpZHRoID0gIjRjbSIpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDIsIHdpZHRoID0gIjJjbSIpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDMsIHdpZHRoID0gIjJjbSIpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDQsIHdpZHRoID0gIjJjbSIpICU+JQogICAgICAgIGNvbHVtbl9zcGVjKDUsIHdpZHRoID0gIjJjbSIpCmBgYAo=